1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Where to get latest Toastman source?

Discussion in 'Tomato Firmware' started by n4mwd, Apr 5, 2013.

  1. n4mwd

    n4mwd Serious Server Member

    Where can I get the latest source for Toastman Tomato?

    I followed the instructions on http://tomatousb.org/tut:how-to-build-and-rebuild-tomato-for-total-noobs and the latest toastman build in the git repository is "tomato-1.28.7453-Toastman-RT", but the latest build is 7501. Not only that, but 7483 has compile errors and wont build.

    I'm wondering if Toastman switched repositories. If so, how do I git it?

    I'm using fedora as a build machine.
     
  2. koitsu

    koitsu Network Guru Member

    Latest source is always here:

    http://repo.or.cz/w/tomato.git

    Toastman has not switched repos.

    The changes might not have been pushed to the git server yet. Toastman reserves the right to push the actual code changes whenever he has time/sees fit.
     
  3. n4mwd

    n4mwd Serious Server Member

    It does have it listed in the web version, but its not showing up in the git version.

    Ok wait a minute. I just realized that the "git tag | grep tomato*" is filtering on the word "tomato". The newer versions of toastman don't have the word tomato in them. That's why they are not showing up.

    Anyhow, I'll try it again with the 7501 version and see if it compiles any better. I will update later.
     
  4. n4mwd

    n4mwd Serious Server Member

    Getting closer, but its still not compiling correctly.

    Toastman Version 7501.7

    Code:
    make[6]: Entering directory `/home/dennis/tomato/release/src/router/openssl/apps'
    openssl.o:(.data.rel.functions+0x8): undefined reference to `verify_main'
    openssl.o:(.data.rel.functions+0x14): undefined reference to `asn1parse_main'
    openssl.o:(.data.rel.functions+0x2c): undefined reference to `dgst_main'
    openssl.o:(.data.rel.functions+0x38): undefined reference to `dh_main'
    openssl.o:(.data.rel.functions+0x44): undefined reference to `dhparam_main'
    openssl.o:(.data.rel.functions+0x5c): undefined reference to `passwd_main'
    openssl.o:(.data.rel.functions+0x68): undefined reference to `gendh_main'
    openssl.o:(.data.rel.functions+0x74): undefined reference to `errstr_main'
    openssl.o:(.data.rel.functions+0x80): undefined reference to `ca_main'
    openssl.o:(.data.rel.functions+0x8c): undefined reference to `crl_main'
    openssl.o:(.data.rel.functions+0xa4): undefined reference to `rsautl_main'
    openssl.o:(.data.rel.functions+0xb0): undefined reference to `dsa_main'
    openssl.o:(.data.rel.functions+0xbc): undefined reference to `dsaparam_main'
    openssl.o:(.data.rel.functions+0xd4): undefined reference to `genrsa_main'
    openssl.o:(.data.rel.functions+0xe0): undefined reference to `gendsa_main'
    openssl.o:(.data.rel.functions+0xec): undefined reference to `genpkey_main'
    openssl.o:(.data.rel.functions+0xf8): undefined reference to `s_server_main'
    openssl.o:(.data.rel.functions+0x104): undefined reference to `s_client_main'
    openssl.o:(.data.rel.functions+0x11c): undefined reference to `s_time_main'
    openssl.o:(.data.rel.functions+0x134): undefined reference to `pkcs7_main'
    openssl.o:(.data.rel.functions+0x140): undefined reference to `crl2pkcs7_main'
    openssl.o:(.data.rel.functions+0x14c): undefined reference to `sess_id_main'
    openssl.o:(.data.rel.functions+0x158): undefined reference to `ciphers_main'
    openssl.o:(.data.rel.functions+0x164): undefined reference to `nseq_main'
    openssl.o:(.data.rel.functions+0x170): undefined reference to `pkcs12_main'
    openssl.o:(.data.rel.functions+0x17c): undefined reference to `pkcs8_main'
    openssl.o:(.data.rel.functions+0x188): undefined reference to `pkey_main'
    openssl.o:(.data.rel.functions+0x194): undefined reference to `pkeyparam_main'
    openssl.o:(.data.rel.functions+0x1a0): undefined reference to `pkeyutl_main'
    openssl.o:(.data.rel.functions+0x1ac): undefined reference to `spkac_main'
    openssl.o:(.data.rel.functions+0x1b8): undefined reference to `smime_main'
    openssl.o:(.data.rel.functions+0x1c4): undefined reference to `rand_main'
    openssl.o:(.data.rel.functions+0x1d0): undefined reference to `engine_main'
    openssl.o:(.data.rel.functions+0x1dc): undefined reference to `ocsp_main'
    openssl.o:(.data.rel.functions+0x1e8): undefined reference to `prime_main'
    openssl.o:(.data.rel.functions+0x1f4): undefined reference to `ts_main'
    openssl.o:(.data.rel.functions+0x200): undefined reference to `srp_main'
    openssl.o:(.data.rel.functions+0x20c): undefined reference to `dgst_main'
    openssl.o:(.data.rel.functions+0x218): undefined reference to `dgst_main'
    openssl.o:(.data.rel.functions+0x224): undefined reference to `dgst_main'
    openssl.o:(.data.rel.functions+0x230): undefined reference to `dgst_main'
    collect2: ld returned 1 exit status
    make[6]: *** [link_app.gnu] Error 1
    make[6]: Leaving directory `/home/dennis/tomato/release/src/router/openssl/apps'
    make[5]: *** [openssl] Error 2
    make[5]: Leaving directory `/home/dennis/tomato/release/src/router/openssl/apps'
    make[4]: *** [build_apps] Error 1
    make[4]: Leaving directory `/home/dennis/tomato/release/src/router/openssl'
    make[3]: *** [openssl] Error 2
    make[3]: Leaving directory `/home/dennis/tomato/release/src/router'
    make[2]: *** [all] Error 2
    make[2]: Leaving directory `/home/dennis/tomato/release/src-rt'
    make[1]: *** [bin] Error 2
    make[1]: Leaving directory `/home/dennis/tomato/release/src-rt'
    make: *** [e] Error 2
    [dennis@AsteriskServer src-rt]$
    
    Looks like its barfing on openssl.
     
  5. koitsu

    koitsu Network Guru Member

    The log you provided is incomplete; nothing changes directories then immediately starts spitting out linker errors. Did you use make -jX ? If so, please cease.

    I have about 6 or 7 ideas as to what could cause this -- none of these I can debug without a full/entire build log.

    Also please ensure that your system is running ntpd (not ntpdate / ntpdate in a cron job) to properly handle clock drift; clock skew can mess up GNU make (and any other make) causing it to skip over files that need to be built.
     
  6. koitsu

    koitsu Network Guru Member

    Just found this:

    http://www.linksysinfo.org/index.php?threads/toastman-releases.36106/page-18#post-225455

    Quote:

    April 2 2013 - 1.28.7502.1 and variants

    updates from shibby's branch​
    - OpenVPN update to 2.3.0​
    - Fix lzo/openvpn compilation (impacts openVPN and openSSL)​
    - add missed commit for 3g modem​

    Can you please try building off of tag 1.28.7502.1 instead?

    Also, please tell me the exact command line arguments you used to build the firmware. I can try to reproduce the problem on my Debian 6.0.7 x86 VM, and if I can repro it I can probably figure out what's broken.
     
  7. Toastman

    Toastman Super Moderator Staff Member Member

    1.28.7502.1 builds ok here now. However, there is a problem still with ssl not working in the non-VPN builds. Shibby told me that I missed this commit:

    http://repo.or.cz/w/tomato.git/commit/8d194e4cb3b7f14ba395f47b1c2bd88752c61da4

    I did try it but the issue remained. I have not had time to do more on this yet.

    If you have doubts, use 7501.4 which precedes the last major package updates, that should build easily - then move on - everything after that I am regarding as "beta" for the moment as I am not sure of the stability.
     
  8. n4mwd

    n4mwd Serious Server Member

    I used 'make clean' followed by ' make e'. I did not use make '-jX'.

    The build process is not well documented. The tomato-usb build instructions are outdated as evidenced by the 'git tag | grep tomato*' line. As such, being that I'm a Linux newbie, I don't know:

    1) where the logs are;
    2) whether I'm using ntpd, ntpdate or cron;
    3) all of the options for MAKE;
    3) how to un-checkout the files in the tomato_git directory so I can checkout the correct version. (As per instructions, the actual build was done in a copy of the tomato_git directory).

    So how do I do these things?

    FYI=Running Fedora as a build machine. Target is Asus RT-N16.
     
  9. koitsu

    koitsu Network Guru Member

    0) There are known problems with make clean with Tomato/TomatoUSB firmwares. It does not clean up everything it should. This is why I recommend, after doing git clone ..., to do cp -pR tomato tomato.orig. You might be able to use git reset --hard to clean things up, but I'm doubting it.

    1) There are no "logs" -- everything shown from make onward is on-screen. You can use the script utility to save all output to STDOUT or STDERR to a file (note that it spawns a sub-shell, e.g. script /some/file will make a new shell from which all I/O is logged to /some/file, and when you're done, you type exit).

    2) I'm speaking of Debian: aptitude install ntp should do the trick, then start the daemon by doing /etc/init.d/ntp start. This installs ntpd. It's configuration file is /etc/ntp.conf -- the defaults should work just fine.

    3) You answered what I was looking for: you were running make e. That's what I needed to know. :)

    4) It sounds like you need to learn how to use git better, and trust me, I understand (truly) how utterly frustrating/confusing this VCS is (compared to CVS and SVN). git is very powerful, but is extremely confusing. You need to understand first that there are two different terms: branch and tag, and how these are used varies depending on how the maintainers of the git repo choose to do things.

    In TomatoUSB's case, branches refer to things like Toastman-RT, Toastman-RT-N, tomato-shibby-RT-N, tomato-shibby-pl, etc.. You can get a list of branches by doing git branch -a. You'll see a lot of strings that start with remotes/origin -- you do not need to use that part of the string when changing branches.

    To change a branch, use git checkout {name}, e.g. git checkout tomato-shibby. Note that you do not include specify the remotes/origin part of the output shown in git branch -a.

    The default branch name is called tomato. (This is not normal, BTW -- usually the default branch name is called master, which is what you'll see in a lot of online documentation). The default branch is basically Jonathan Zarate's Tomato (as in the true/stock thing), and everyone else versions/firmwares are "on top" of that. Think of it like multiple pieces of transparent film/plastic layered atop one another.

    To see what branch you're on, use git status. Here's an example:

    Code:
    jdc@debian:~/tomato$ git branch -a | grep -i toastman
      Toastman-RT
    * Toastman-RT-N
      remotes/origin/Toastman-IPT-ND
      remotes/origin/Toastman-ND
      remotes/origin/Toastman-RT
      remotes/origin/Toastman-RT-N
      remotes/origin/Toastman-RT-N-jya
      remotes/origin/Toastman-RT-jya
      remotes/origin/Toastman-VLAN-ND
      remotes/origin/Toastman-VLAN-RT
      remotes/origin/Toastman-VLAN-RT-N
     
    jdc@debian:~/tomato$ git status
    # On branch Toastman-RT-N
    nothing to commit (working directory clean)
     
     
    jdc@debian:~/tomato$ git checkout tomato-shibby-RT-N
    Checking out files:  32% (2567/8019)
    ...
    Checking out files: 100% (8019/8019), done.
    Branch tomato-shibby-RT-N set up to track remote branch tomato-shibby-RT-N from origin.
    Switched to a new branch 'tomato-shibby-RT-N'
     
    jdc@debian:~/tomato$ git status
    # On branch tomato-shibby-RT-N
    nothing to commit (working directory clean)
    
    Now about tags. Tags are a way to "tag a snapshot of a tree at a moment in time". You can get a list of tags for the branch you're on using git tag -l. Example:

    Code:
    jdc@debian:~/tomato$ git tag -l | grep Toastman-1.28.05
    Toastman-1.28.0500.2
    Toastman-1.28.0500.3
    Toastman-1.28.0500.4
    Toastman-1.28.0500.5
    Toastman-1.28.0501
    Toastman-1.28.0501.1
    Toastman-1.28.0501.2
    Toastman-1.28.0501.3
    Toastman-1.28.0501.4
    Toastman-1.28.0501.5
    Toastman-1.28.0501.6
    Toastman-1.28.0501.7
    Toastman-1.28.0502
    Toastman-1.28.0502.1
    
    To switch to a specific tag -- and this might surprise/confuse you -- you use git checkout tags/{whatever}, e.g. git checkout tags/Toastman-1.28.0502.1. Example:

    Code:
    jdc@debian:~/tomato$ git checkout tags/Toastman-1.28.0502.1
    Note: checking out 'tags/Toastman-1.28.0502.1'.
     
    You are in 'detached HEAD' state. You can look around, make experimental
    changes and commit them, and you can discard any commits you make in this
    state without impacting any branches by performing another checkout.
     
    If you want to create a new branch to retain commits you create, you may
    do so (now or later) by using -b with the checkout command again. Example:
     
      git checkout -b new_branch_name
     
    HEAD is now at 42c112b... Merge branch 'Toastman-RT' into Toastman-RT-N
     
    jdc@debian:~/tomato$ git status
    # Not currently on any branch.
    nothing to commit (working directory clean)
    
    Note the output of git status at the end there -- you might be wondering why it says "not on any branch" -- it's because I'm not working off of a branch, I'm working off of a tag. I've always found this very confusing, to be honest; git differs in how it handles tags than other VCSes. In case you can't tell, I really don't like git, I prefer SVN. :)

    If you've made any changes to the tree, and want to reset them, git reset --hard can do that for you. Please be sure to read up on what git reset does though, as it can make quite a mess if you do the wrong thing.

    But like I said, I strongly suggest, that after doing the git clone you do cp -pR tomato tomato.orig just so you have a clean/untouched copy of the git repo that you can resort to if you get confused/lost/etc.. It's a lot better than having to do rm -fr tomato ; git clone ... not to mention is more friendly/respectful of the repo.or.cz folks' bandwidth.
     
    jinjorge likes this.
  10. mstombs

    mstombs Network Guru Member

    I use "tee" to copy most output into a datetime-stamped log file, for example

    Code:
    LOG=~/log$(date '+%Y%m%d%H%M%S').txt
    time -f "%E real, %U user, %S sys" make V1=0000 V2=0000 e m | tee $LOG
     
  11. jinjorge

    jinjorge Networkin' Nut Member

    Thank you for dropping this piece of knowledge. I am not looking to build from source but reading through your post helped me better understand git.
     
  12. n4mwd

    n4mwd Serious Server Member

    Sorry for the delay in getting back to you. My asterisk server exploded yesterday and I haven't figured out the solution yet. But back on topic, here is what I got:

    Code:
    [dennis@AsteriskServer tomato]$ git branch -a | grep -i toastman
      remotes/origin/Toastman-IPT-ND
      remotes/origin/Toastman-ND
      remotes/origin/Toastman-RT
      remotes/origin/Toastman-RT-N
      remotes/origin/Toastman-RT-N-jya
      remotes/origin/Toastman-RT-jya
      remotes/origin/Toastman-VLAN-ND
      remotes/origin/Toastman-VLAN-RT
      remotes/origin/Toastman-VLAN-RT-N
     
    [dennis@AsteriskServer tomato]$ git checkout tags/Toastman-1.28.7501.1
    Previous HEAD position was c676abb... fix openssl compilation when FULL_OPENSSL is not defined
    HEAD is now at 5358fd6... Cosmetics - Pie Chart selector
    
    [dennis@AsteriskServer tomato]$ git status
    # Not currently on any branch.
    nothing to commit (working directory clean)
    
    [dennis@AsteriskServer tomato]$ cat .git/logs/HEAD
    0000000000000000000000000000000000000000 96f09fab4929c6ddde5c9113f1b2476ad37133c4 Dennis <dennis@xxxxxxxxx.com> 13652
    00659 -0400     clone: from git://repo.or.cz/tomato.git
    96f09fab4929c6ddde5c9113f1b2476ad37133c4 c676abb1108945dd0074096a112919ed3b2cc3ca Dennis <dennis@xxxxxxxxx.com> 13652
    01285 -0400     checkout: moving from tomato to Toastman-1.28.7501.7
    c676abb1108945dd0074096a112919ed3b2cc3ca 5358fd60478a427b61b8b7eefa1e6752e334a1a2 Dennis <dennis@xxxxxxxxx.com> 13654
    34447 -0400     checkout: moving from c676abb1108945dd0074096a112919ed3b2cc3ca to tags/Toastman-1.28.7501.1
    [dennis@AsteriskServer tomato]$
    Is there an index somewhere that explains what the base names are? That is, RT vs RT-N vs VLAN?

    I will run 'make e' again and see what happens.
     
  13. koitsu

    koitsu Network Guru Member

    There is no such "index" explaining what all the branches are, no.
     
  14. Toastman

    Toastman Super Moderator Staff Member Member

    This may help a bit, the blue branches are "current":

    remotes/origin/Toastman-IPT-ND = K24 builds with IP Traffic info
    remotes/origin/Toastman-ND = K24 builds (old)
    remotes/origin/Toastman-RT = K26 builds for most recent routers
    remotes/origin/Toastman-RT-N = K26 builds with more recent wireless driver (bigger, may have some benefits and some drawbacks)
    remotes/origin/Toastman-RT-N-jya= Jean-Yves Avnard's branch based on Toastman-RT-N (this is merged into most modders code)
    remotes/origin/Toastman-RT-jya = as above
    remotes/origin/Toastman-VLAN-ND = branch was used for vlan development, as I recall
    remotes/origin/Toastman-VLAN-RT = Has VLAN GUI from Augusto Bott. I kept the VLAN code separate so that we can build stable branch without all of the experimental code.
    remotes/origin/Toastman-VLAN-RT-N = as above
     
  15. n4mwd

    n4mwd Serious Server Member

    Attached is a log from the build. I used 7501.1 and 7501.4 with similar results. They all crash on openssl.o
     

    Attached Files:

  16. lancethepants

    lancethepants Network Guru Member

    Don't do any parallel building if you are ie. using the -jX command. That will most certainly break OpenSSL, and is not supported, at least at this time.
     
  17. koitsu

    koitsu Network Guru Member

  18. koitsu

    koitsu Network Guru Member

    I cannot reproduce the build issue reported by n4mwd. Attached is full output from a script session when doing make V1=1.28.0502.1 V2=Toastman-RT-N e. You can clearly see the firmware builds without issue. (Sorry for having to .zip it, but the output was too big for the forum)

    I was building the Toastman-RT-N branch (latest code), i.e. git checkout Toastman-RT-N.

    My system is Debian 6.0.7 (x86 (32-bit)); packages installed on the system are attached in dpkg.txt.

    My recommendation is to stop using make clean. As I have said before, this does not work correctly and leaves leftover crap/cruft laying around and may cause issues for you. Do not use make distclean either. Instead, just cp -pR tomato tomato.orig before building in the case the build doesn't work and you need to "roll back" to something clean. (Seriously, try a build, do make clean or make distclean then look at git diff or git status for all the differences that shouldn't be. :p)

    I did find a very bizarre/uncomfortable bug that looks like raw binary data is being sent across the wire (causing PuTTY to freak out and emit it's identification string in response) during the build of libjpeg, when attempting to detect the system type. It appears some crap it builds called "dummy" breaks very, very badly. I would need to look into that deeper to find out the root cause, but it did not stop the firmware from being built.
     

    Attached Files:

  19. n4mwd

    n4mwd Serious Server Member

    I'll try another clean build tomorrow (by using the cp command). If 'make clean' isn't working then there is a bug in the make file. I'm wondering if anyone else has used fedora for the build. It could be that's the difference. I really don't like fedora and I'm looking for an excuse to get debian or ubuntu on there.

    One other thing is that that I'm trying to build 7501.x and you built 0502 which is a much older version. Also, I left the V1/V2 parameters blank because there was nothing really saying what they should be. I don't know if that is significant.
     
  20. koitsu

    koitsu Network Guru Member

    The only distros I can personally confirm work are Debian 6.0.6 x86, Debian 6.0.7 x86, and Ubuntu 11.04 x86. Toastman I believe uses a different distro (Mint? I forget -- I'm sure he'll chime in).

    I explain what the V1 and V2 parameters are in my blog.

    In my findings, the most important parts were:

    1) Using a 32-bit distro, not 64-bit. Yes, 64-bit OSes often have compatibility shims and libraries for 32-bit builds, but I was not able to get such to work on Debian or Ubuntu (probably due to my own lack of familiarity with Linux -- I am incredibly familiar with FreeBSD (going on 17 years)),

    2) Making sure you have all the correct packages installed on the system (see my blog post for the list). The packages needed vary depending on what TomatoUSB firmware you want to build; Toastman works with the ones I list on my blog / in my dpkg.txt output, while Shibby requires numerous additional packages.

    3) Not using make clean nor make distclean. Did you actually review the log you posted? You can clearly see all the errors/warnings -- and whoever wrote the Makefile chose to do so using @ to ignore such situations. The main issue is all the third-party crap that gets built with a firmware -- nobody (Toastman, etc.) has any control over that.

    The last item is just one of a good hundred reasons why I continue to have the opinion that the Tomato firmwares should just be bare-bones, with no third party anything installed, and that all the extra "stuff/features" be built as packages that can be installed (via CLI (e.g. opkg) or via GUI (would need to code that)). People who want this "all in one" (I'm not talking literally about Shibby AIO firmwares) do not understand how thrown together much of the open-source worlds' software is. I also want to see Busybox nuked from orbit, in addition to replacing uclibc with musl-libc (see for yourself why).

    Welcome to the state of the Linux embedded development environments! Most of them in my experience are like this -- hobbled together, where after many years folks really do want to fix all the Dumb(tm) but do not have the time to do so any longer.

    If you want a clean/logical build environment, check out the WL500G stuff, or check out OpenWRT. Avoid projects like DD-WRT, which has a significantly worse build infrastructure.
     
  21. n4mwd

    n4mwd Serious Server Member

    I think I'm going to wipe fedora and install debian. Fedora has this really goofy user interface (not a standard desktop) that I can't stand - even more goofy than Windows 8. Please tell me Debian doesn't use that and uses xwin or something similar. The last version of ubuntu I installed didn't have that, but I don't recall the version number.

    I just looked at your blog and its very informative. At least I know what the V1/V2 stuff is. It also looks like I should have been using r2e and not just e for the asus RT-N16.

    I did notice some error-like lines, but I don't know enough about Linux builds to say for sure. My assumption is that the make file knows how to build a linux program better than I do at this point. Maybe that's giving the make file too much credit. One other thing is that it looks like its compiling several, not all, programs with the x86 gcc compiler rather than the mips compiler. I'm assuming that its compiling some sort of utility that it needs for the make.

    As far as the build in general, I was wondering why not have the kernel compiled as a separate .0 file and then all the goodies just linked to that. I imagine that the kernel is a big part of the compile. The thing about this stuff is that by the time people get good enough to make useful changes, they no longer have time to actually do it.

    My ultimate goal here is to have a router that does all of my server needs. I currently run my own mail server and web server in a separate box. They are for very low bandwidth usage. So why not put the mail, web and voip server in the router and toss the windows server? The router already handles the same exact data.

    Anyhow, back on topic, I'm going to try the r2e build and see if that does any better. If not, I'm going to wipe and go debian.

    EDIT: Still fails with r2e.
     
  22. Toastman

    Toastman Super Moderator Staff Member Member

    As Koitsu said, I used Mint. No particular reason except that it seems to (mostly) work. I would strongly discourage anyone from using Ubuntu, which is a total POS in my humble opinion. Whenever I have tried it, it drove me totally mad. Yes, it can be made to work, but why make like difficult?

    Windows 8 is another classic MS screw-up. Looks like something out of a christmas cracker, somewhat inferior to Windows 95. Except it only has one window, of course. When they finally get around to realizing their error and re-issue it with a proper interface, it will be better. Vista all over again... ?

    Good luck ..
     
  23. koitsu

    koitsu Network Guru Member

    The kernel is not a "big part" of the compile -- it's all the 3rd party packages/crap (and all the 3rd party dependencies they have) that take up the most time.

    Also, your statement about "compiling the kernel as a separate .0 file then linking goodies to that" makes no sense -- respectively, I don't think you understand how a kernel works, how ld.so works, nor how shared libraries work. :) You don't "link" things to the kernel.

    Good luck.
     
  24. n4mwd

    n4mwd Serious Server Member

    In all fairness, I did mention that I'm a Linux/unix newbie. Its not easy coming into a world that has no "C:" drive. But true, I don't know much about anything when it comes to Linux. But I'm learning. I would imagine that the shared libraries work something similar to DLL's in the windows world. As far as kernels, I do have an idea how they work, just not specifically the linux one.

    From your description, it does sound like there is a a bunch of unnecessary redundancy in these libraries.
     
  25. koitsu

    koitsu Network Guru Member

    It's okay -- I do this stuff for a living/professionally, and can't expect everyone to know it.

    Not redundancy -- recursive dependencies. For example feature/program X depends on library A, B, and C. Library A depends on library Q and F; library B has no dependencies; library C depends on library R and F. The rabbit hole goes very deep with some of these programs (Samba is a perfect example).

    Shared libraries on UNIX, as a concept (not as an implementation), are similar to Windows' DLLs. They're done a lot differently (more sanely in a lot of regards). However, Windows DLLs don't "link against the kernel" either.
     
  26. n4mwd

    n4mwd Serious Server Member

    I'm currently downloading the debian 6.0.7 live DVD. The regular install DVD is now 8 DVD's in size. They sure want to scare people to the nearest Windows store don't they. But anyhow, the live DVD option let me pick which gui I want. The horrible GUI on fedora is called gnome. I'm going to try KDE with debian and see if I like that better. The live DVD is supposed to be installable. The goal here is to create a stable build environment for Toastman Tomato. I'm just hoping that all the virtual machines I have on there are compatible with debian. I've had trouble with compatibility between VirtualBox versions before.

    Anyhow, been reading up on linux ELF shared libraries. Looks like they use a hard coded path to a loader to handle the rest of the file. I have to say, that while that approach is more flexible, its also more dangerous in that, what if the ld.so file is not in that path? Its probably not going to run and hence wont load the program. It would also mean that it would be possible to point to a loader that could load Windows EXE format so running a simple static linked WIN32 EXE could be possible.

    I don't have a problem with recursive dependencies. That's what package managers are for. But I do have a problem with a program demanding library W when library B does pretty much the same thing. Or when a program loads a huge library just to get one little function out that could have been statically linked.

    Anyway, I'm still downloading at 50% now.
     
  27. koitsu

    koitsu Network Guru Member

    I tend to use the Debian netinst ISOs because they're bare-bones and lack GUI crap. I don't need a GUI for building a firmware, haha. :) But then again I do this stuff for a living. I use Windows as my main workstation OS, so Debian/etc. all get run in VMs using VMware Workstation.

    Regarding shared libraries: no, paths to the library are not hard-coded. ld.so contains a list of "path hints" where you can tell it libraries reside; common defaults are /lib, /usr/lib, and /usr/local/lib. These are hints that are resolved at run-time by the ld.so loader, they are not compile-time. These hints can be adjusted (it varies per OS how to do this (Solaris is different from Linux is different from FreeBSD)), or if you want to override them, you can do so in multiple manners: either using RPATH (ex. gcc -rpath) -- which is how Entware works -- or using the LD_LIBRARY_PATH environment variable (which should be avoided barring very specific situations). The only thing that's hard-coded is the fully-qualified library name (ex. libsnakes.so.0 (not libsnakes.so)). And that has to be done that way for a reason (keep reading), and it's extremely justified.

    You'll hate dependency nightmares if you ever go the system administration route. Trust me -- "this is what package managers are for" is not a solution, it's an excuse. Take the example scenario I gave you and multiply the library counts involved by about 20 (this is how X on *IX systems works -- it's a nightmare). Now try to imagine what has to happen if you upgrade/rebuild library F -- you cannot just rebuild/upgrade it independently of all the other libraries/applications that depend on it, because the ABI semantics may have changed. Welcome to dependency hell.

    This is also why when I see people encountering missing libraries ("libsnakes.so.2: not found") and some jackass comes along and says "just rename libsnakes.so.1 to libsnakes.so.2" I want to punch them in the face. There is zero guarantee this will work, as again, the ABI semantics have changed, and the result will be mysterious crashes or missing symbol errors (possibly at run-time, possibly while running the app).

    The UNIX way is to keep things small/minimal, allow programs to interact via common models (stdin/stdout, FIFOs, IPC), and don't take shortcuts.
     
  28. n4mwd

    n4mwd Serious Server Member

    Well Debian didn't work. I downloaded it from their Texas mirror and I'm thinking that version was tampered with. The CD comes up and says "Invalid Image" when I put it in and try to run it. Nero said the block size was wrong, but I said to ignore it because I figured the debian folks new what they were doing. I'll try downloading from a different mirror tomorrow.
     
  29. koitsu

    koitsu Network Guru Member

    This is why you should check the hashes (MD5 or SHA1 or SHA256) after downloading something. :) Alternately, if the issue is corrupted network traffic, you can use a torrent (since per piece/block those have checksum/hashing checks). If the MD5/SHA1/SHA256 hashes are correct, then the issue is with your media, burner, burning software, or some other anomaly.
     
  30. n4mwd

    n4mwd Serious Server Member

    Got it, then trashed it and got xfce instead. I don't like their new GUIs. I had to put everything on hold now that the router seems to have burned out.

    Link
     
  31. n4mwd

    n4mwd Serious Server Member

    Tried to install xfce debian tonight and the installer crashed. I tried the text installer which worked better, but still had problems. After installing, it couldn't find my wifi adapter (although it did find it during the install). Although it found the wired adapter, it still wouldn't let me telnet into it. And the mouse pad didn't work which was a hassle. Debian is junk as far as I can tell.

    I don't want to waste any more time with it. I'm downloading Mint right now so we will see if that is any better. If not, then I'm just going to put Fedora back on there.
     
  32. lancethepants

    lancethepants Network Guru Member

    I think Mint is a pretty decent distro, and definitely less resource hungry than Ubuntu (plus it's binary compatible). I'm with Koitsu on this one, I prefer to ssh into a Linux Server Distro and do things with the command line using cygwin from Windows.
     
  33. n4mwd

    n4mwd Serious Server Member

    So far, mint is behaving itself. Not totally glitchless. It made unauthorized use of the webcam during the install. Not happy about that at all. The wifi is working pretty seamlessly. The mousepad bug was also in this version, but there is a "fix mousepad bug" option in the control panel.

    I plan to use telnet for everything, but I want a decent console that I can get in and do things when I want to. Mint's GUI seems very reasonable. I like it the best so far out of the three. I am using version "Mate". Its still installing so I'll post later whether it actually runs or not.
     
  34. Monk E. Boy

    Monk E. Boy Network Guru Member

    I find the best way to prevent unauthorized anything for webcams is to put a nice big piece of electrical tape over the lens and leave it there for all eternity.
     
    Toastman and koitsu like this.
  35. n4mwd

    n4mwd Serious Server Member

    Already did that. I could see the blue light come on which is how I know they were messing with it.

    Its downloading all its updates right now. Hopefully it wont be much longer before I can torture myself in other ways.
     
  36. n4mwd

    n4mwd Serious Server Member

    Mint is up and running and looking good. The only major problem so far was that I had to jump through a lot of hoops to get telnet working, but its working now. I'll reattempt the build tomorrow.
     
  37. n4mwd

    n4mwd Serious Server Member

    Don't know why, but the make file just doesn't work with Fedora. I installed Mint and set up my environment and its happily building right now. Its been running for a long time so I'm pretty sure it got past the OpenSSL problem. I'm getting a lot of "nd ΓÇÿ&&ΓÇÖ with nd ΓÇÿ&&ΓÇÖ with" stuff, but its not complaining.

    =========

    Ok, it just stopped again. This time with this on the screen.
    Which looks a lot better than what I had before. For some reason it didn't build the VPN version even though I specified "r2e".

    Thanks for all your help guys. Next task -> "HelloWorld.c"





    Thanks everyone.
     
    Toastman likes this.
  38. koitsu

    koitsu Network Guru Member

    Congrats, looks like you got the firmware to build successfully.

    Welcome to just how chaotic Linux is -- every distro is significantly different.

    I covered that here. There is definitely something broken/busted during the build process that causes this, and its a few pieces of third-party applications. I mentioned libjpeg being one -- it appears to build a very broken/busted test binary called "dummy" that tries to auto-detect the host type, and in the process the program or ELF loader (take your pick) emits a bunch of raw binary data which pisses off terminals. It's ""harmless"" but it makes a mess.
     
    Monk E. Boy likes this.
  39. n4mwd

    n4mwd Serious Server Member

    So far Mint seems like a really good distro. I believe they will jump to the top pretty soon.

    I do use telnet from a Windows machine, but you lost me with the cygwin stuff. I just open a DOS box (command prompt) and enter "Telnet tomato" and I'm in.
     
  40. Monk E. Boy

    Monk E. Boy Network Guru Member

    cygwin is a Unix-like environment that can run under Windows. Basically with cygwin no matter what platform you're on - Windows or Linux - you can use the same(-ish) command line tools with the same command line arguments.

    I use a baby cygwin environment on a couple systems, in part because some tools I use were ported from Linux and require cygwin to function.
     

Share This Page