alternative multilib
I'm looking for any documented methods for constructing a multilib Slackware system that is NOT based on just installing a multilib package, but rather, a set of steps to do to take the file tree of a 32-bit system (already installed as pure 32-bit), and selectively copy files to a 64-bit system (already installed as pure 64-bit), and then (the important part), what else needs to be done to it. I am planning to work out the steps myself and compare to what others might be doing.
|
Alien Bob's steps already do this. His compat32 libs are repackaged Slackware 32bit binaries.
You need his compilers and glibc to run anything in 32bit or compile in 32bit as I believe a multilib glibc/compiler is not the same as trying to use two different compilers and two different sets of glibc... but I could be wrong. If you don't care about compiling, you can try creating an glibc package from Slackware 32bit. Just make sure none of the files overlap with your existing 64bit system. You can use 'explodepkg' to extract to a directory, make your changes and repackge it. |
Quote:
Quote:
I'm not really interested in compiling under multilib. I have both 32-bit and 64-bit trees of full vanilla Slackware to chroot into and compile there. Quote:
Quote:
|
Quote:
Quote:
|
Quote:
|
Perhaps you need to think about what you want and try and explain it a bit more. I am not convinced that what you are suggesting would work as you would need to have two glibc and gcc files (one 32bit and one 64bit) and they would both be called from the same location.
I am also not sure that you fully understand what Alien Bob's multi-lib layer does. The gcc and glibc are cross-compiling versions of the programs. Not only does this allow you to cross-compile but allows you to run both 32bit and 64bit programs as any system calls by the 32 or 64 bit program will only find one version of the program and therefore the correct instructions. The 32-compat library programs are just the .so elements extracted from the full program and renamed so that they can be installed/uninstalled easily. You could just install the full program but uninstalling could be a problem. You can compile application packages in a pure 32 or pure 64 and they can then just be installed on a multi-lib system whether or not they are 32 or 64 bit. So apart from the cross compiling glibc and gcc all of it is just straight from the 32 and 64 bit trees with a little re-naming to avoid potential problems. If I have misunderstood you then ignore this, but it does seem to be an awful lot of work for the three or four 32-bit programs that are wanted on a 64-bit system, when an elegant and logical working system already exists. samac |
Quote:
Quote:
I have no interest in cross compiling in this project. I specifically want to avoid that as part of keeping this simple. Even if I need to patch and rebuild something (such as maybe ld-linux.so ... but I don't think I do because the different versions of the linker look in different places for other libs), I would do that rebuild inside respective pure-32 or pure-64 systems (chroot into the appropriate tree) and do that. As far as I can see, dynamic executables use a different name for the ld-linux.so execute time linker, and that can sort out the paths from there (e.g. /lib vs. /lib64). Quote:
Quote:
Quote:
Are you referring to gcc's execute time library? Shouldn't that be found by the same means other library .so files are found? Is it different? Quote:
Maybe all the difference between what Alien Bob did and what I want to do is a combination of: 1. He includes cross compiling because he targets making a system that stands entirely on its own. I won't because my system will have both pure-32 and pure-64 trees available. 2. He repackages the needed pieces orthogonally from other packages since that's the minimal way to get what is needed. I would hardlink the pieces (if they don't need to be modified) from the appropriate pure-32 or pure-64 trees. With respect to #2 above, my script will be hardlinking virtually everything in the tree it builds from scratch (e.g. my script is started with the target tree being entirely non-existant, and as its end result, a complete aggregate tree is produced). My question in this thread is seeking to find out what else might be needed as a head start. If something else is needed, like patching and rebuilding ld-linux.so to change its behavior a bit, I'm sure I will discover that. In worse cases I might have to back up and re-do some of the design. Knowing ahead of time about issues I could plan better from the start. |
What you want to do is have statically linked packages rather than dynamically linked.
samac |
Quote:
|
Obviously I have been unable to understand the concept that you are trying to explain. Best of luck with your project.
samac |
Quote:
Quote:
As far as I can tell, what you want is to have 3 separate trees: one pure slackware64, one pure 32-bit slackware, and a mixed tree to which you will copy things from the previous two. In that case, try having the target tree be slackware64 and just copy files into the appropriate places (/lib /usr/lib) and see how it goes. If you want multiple copies of binaries into /usr/bin you will have to change names of the binaries or have something like a /usr/bin/32 directory. |
Quote:
Quote:
Quote:
When I build the two pure environment trees, I start with copies of a complete install of Slackware and Slackware64 of some version. In this case, my script runs through both trees and looks for files named the same under both trees. If they are identical, the hard linking is done. If not, then the different files are left as is. For making the multilib tree, the starting logic is to just hardlink with the pure-64 tree for all files that exist in the pure-64 tree, and hardlink with the pure-32 tree for the rest. At that point the multilib tree has nothing new besides a bunch of new directories (even symlinks can be hardlinked). Now my big question while still in the planning stages of building the script that builds this tree is ... what else (besides the toolchain I don't need). Quote:
I do think the "pure and hybrid trees" construct I plan to make will be quite useful, especially for cases where stuff that can run under either pure environment needs to be tested in each (you don't have that if all you have is the multilib). While executables don't fit that, things like scripts can be. Now it might well be useful to also include Alien Bob's multiarch toolchain for the purpose of testing source packages you develop. You can test that your package ... 1. ... builds OK in a pure 32-bit environment 2. ... builds OK in a pure 64-bit environment 3. ... builds the intended default in a multilib with multiarch toolchain environment 4. ... builds the alternate arch OK in a multilib with multiarch toolchain environment 5. ... builds both architectures if intended in a multilib with multiarch toolchain environment It's possible a Makefile or SlackBuild for some project might have bugs with respect to one of those environments. |
OK, I understand what you want to achieve. But I wonder why you want to achieve something like that.
Quote:
2. Can be tested in that same 64 bit environment. 3-5. Needs a multilib-environment anyways. So wouldn't it be simpler to set up a 64 bit system, a 32 bit chroot (or a native install) and a multib environment? May be only one of them on a physical machine, the rest virtual? Don't get me wrong, I think it would be a somewhat fascinating experiment to get that working. I just don't see the advantages of this new type of install over the "normal" ones, that are even simpler to set up. |
Just do a full install of slackware 32 to a separate root directory and chroot when you need to execute slackware32. If you don't install all your needed 32bit dependencies to another root directory and you don't repackage them to void conflicts with your existing 64bit system then you are going to have mixed 32bit and 64bit and more than likely something will fail eventually.
Code:
ROOT=/path/to/32bit/root installpkg package-name-0.0.0-whatever.txz Code:
rm -rf /path/to/new/root If you don't do a chroot tree, then you are going to have to use Alien Bob's method. If you don't want to use ALL of Slackware 32bit's packages, then you are going to have to be selective. I recommend using the list of packages from Alien Bob's method as a guide line to installing the full Slackware 32bit packages as described above. Please note, that this method will keep an install log under the 32it chroot tree because you used ROOT= when executing installpkg. I don't know if you can set up icons or execution scripts to do Code:
chmod /path/to/32bit/root; ./usr/bin/program_name More than likely, you can not simply execute the 32bit binaries with just /path/to/32bit/root/usr/bin/program As everything will be linking to /usr/lib/ instead of /path/to/32bit/root/usr/lib... But I could be wrong, and there may be some other configures on the 64bit root file tree that would allow this. |
Quote:
|
Personally, I'd just like to see ia32 emulation libraries a la Bluewhite64. The vast majority of users of Slackware64 do NOT need the ability to compile 32 bit programs, just a means of running them. Although Eric's solution is more complete, it's also unnecessarily complex for the majority of users.
|
Quote:
Markus |
Quote:
|
Quote:
Quote:
Or make a better implementation instead of dumping your shit on me. At least Skaperen does a honest attempt to find an alternative approach that works better for him. You know, it eats up a lot of my own free time to keep multilib packages up to date for Slackware64 users, and if all I get is the whining from types like you, then this is where I say "I quit and thanks for all the fish". Slackware64 is a 64bit pure OS. Period. It was possible to add a multilib subsystem for a while, but I have better things to do. Good luck with it. Eric |
Quote:
Nobody is disputing the work involved. Actually, it's TOO much work for the return. Simply use IA32 emulation libraries and disallow compilation and most of the work will disappear. Again, most users do NOT need to compile 32 bit programs on a 64 bit system. Finally, over time, I'm moving away from Linux entirely unless the developers of the kernel switch to a micro-kernel. ;) |
Quote:
Eric is doing a great job with his work on multilib, before criticizing him you should come up with a working solution for yourself. |
Quote:
Quote:
Quote:
FYI ... I currently have a kernel patch that lets me specify a boot parameter of rootdir=/some/path which sets up / to be the specified directory on the partition specified via root=device. If you just mount the filesystem I built in the usual way, you'd see two directories (besides "lost+found"), named "root32" and "root64". Within those directories is everything you would get from an install of Slackware-${VERSION} and Slackware64-${VERSION}. My plan is to add a third to be named "rootml". I could do all this by merely copying the root tree from the installation staging area. To reduce space used in the filesystem, and to enhance file caching in RAM, all files that have peer names (e.g. where "ls -l ${MOUNTPOINT}/root{32,64}/${FULLPATHNAME}" would show both files) and are identical in content are made hardlinks of each other. While executables would not be identical, the no-arch files would be, as well as some other files in the arch-specific packages. I already have this done with the two pure environments. Adding the multilib environment should be, with maybe a small few exceptions, entirely hardlinked to either the 64-bit environment (mostly) or the 32-bit environment (the compatibility parts). So I should see a filesystem space utilization attributable to just all the additional directories. BTW, I am depricating that kernel patch I made to implement rootdir= and will be developing it as an early user space init program that takes rootdir= from the parameters and does the necessary pivoting and mount binding. This is in keeping with Linus' direction of kernel development. |
Quote:
|
Quote:
|
As I said before, I can see what you are doing, but I don't understand why you are doing it. What is the actual advantage of your system over a simple 64 bit install with a 32 bit chroot, and if needed a multilib-chroot (besides some saved space)? This way you don't need all the linking and the kernel/userspace-patch. By the way, is that patching really needed? Wouldn't it be simpler to use different partitions? I think size shouldn't matter in times of harddisks in terabyte-sizes.
|
Quote:
Linux 2.6.37.5 x86_64 with SlackwareML-13.37 Linux 2.6.37.5 x86_64 with Slackware64-13.37 Linux 2.6.37.5 x86_64 with Slackware-13.37 Linux 2.6.37.5 x86 with Slackware-13.37 Rescue Mode Memory Test |
Quote:
To avoid confusion, maybe I should find another term, instead of "multilib", to make reference to the way I'm building my tree. Maybe "combolib". |
Quote:
Separate partitions won't allow hard linking the files. Files that are not hard linked will appear to the kernel to simply be separate files. When the kernel caches any file contents in RAM, the unlinked files, when accessed separately (such as when I am running a test suite in 32-bit and a test suite in 64-bit concurrently) would be redundantly cached. If they are hard linked, then the separate accesses to these files are accesses to the same inode and this the same data blocks, and one cache copy in RAM suffices. I'm also intending to make bootable backups on DVD and/or memory sticks and/or memory cards. I haven't decided on the specific details for this aspect, yet. A recent install of Slackware{,64}-current from a few days ago netted a 32-bit root tree of 5304751 blocks, and a 64-bit root tree of 5491169 blocks, having a combined size of 10795920 blocks. After running my script that just hard links peer named files that have the same contents, the space usage went down to 7668316 blocks. And this is without the KDEI section. |
Quote:
Quote:
Code:
grep "bin/" *compat32* | grep -v 32/ I don't get what Skaperen wants to do and why the current multilib is inadequate to him. |
Quote:
I'm only interested in the more elaborate environment I've proposed to gain selective pure environments. It may well even work out to install Eric's setup in lieu of my own, then let a script retroactively look for matching files to hard link from three trees. Quote:
Code:
find {,/usr}/{,s}bin -type f -exec file '{}' ';' | fgrep executable | fgrep dynamically | fgrep 32-bit Quote:
|
Quote:
|
Don't speak for 'most users' as I would guess 'most users' actually need the stuff to compile wine and virtual box but that's just a guess. Just because you don't need these, doesn't mean other people don't.
|
@tpreizel: What you are saying is: I would rather see the IA32 emulation layer in Slackware. No need for the ability to compile 32 bit software. I can make the emulation layer. But I don't want to spend my time on it, so it would be better if Eric does it. Because of reasons that were stated where?
Quote:
Melodrama? May be. But from whom? |
I use Erics Multilib and have compiled several 32 bit packages (including firefox pre 64bit flash, skype and wine), I also do some android development and have to use several pre-compiled 32bit binaries so I have found his work on the subject immensely helpful, I lack the expertise to put together my own 32 bit emulation so having clear instructions on how to implement the multilib system has made my slackware experience far more complete, many thanks to you AlienBOB for all of your hard work for the slackware community, most of us appreciate it.
|
Quote:
You are a known Bluewhite64 fanboi. Bluwhite64 is a Slamd64 rip-off with some bits removed (the multilib capability). It pretends to be a pure 64bit OS but then at some point, the developer thought that he should add a "IA32 emulation" layer anyway, thereby refuting his claim to be a "pure 64bit Slackware". That "IA32" layer is a crude hack, it needs a lot of work and it uses "lib32" library directory names, which is a non-standard way to mix 64bit with 64bit libraries on a single system. According to the Filesystem Hierarchy Standard (see http://www.pathname.com/fhs/pub/fhs-2.3.html#LIB64) the use of "lib32" should be left exclusively to 32bit libraries on the IA64 platform, whereas our AMD64 platform (the official name for the PC x86_64 platform) should use "lib" for 32bit libraries and "lib64" for 64bit libraries. This is what Slackware follows. Quote:
Is it "intrusive" because you have to replace your 64bit glibc packages with multilib versions which I compiled for you? It is a simple one-line "upgradepkg" command which you use for that. And only if you want to be able to compile 32bit software, you can also upgrade your gcc packages to my multilib-capable versions which is also achieved through the same one-line command. It is not even mandatory. My multilib packagea are primarily meant to run 32bit software, and you get optional compilation for free. If you actually want to run 32bit binaries on the 64bit Slackware OS, you need your C libraries to be aware of them. That is why you upgrade to my glibc packages. You also have to convert and install a subset of 32bit Slackware packages to provide the 32bit libraries your 32bit program requires. All this can be achieved easily using the scripts you install with my "compat32-tools" package. You do not have to recompile anything. You just have to re-package some of the 32bit Slackware packages. That is a process which takes minutes, not hours. We are still talking about running 64bit Slackware here. You are aware, that from day one, slackware64 is created as a 64bit platform that can easily be extended to full multilib capabilities. If you want to run 32bit applications on 64bit Slackware, then the packages that I have been providing are a time-saving and easy road to multilib capability. If you are so intent on running 32bit applications but hate my work, then by all means, install the 32bit version of Slackware! You get both Slackware versions on the single DVD that you've surely bought in the Slackware Store! Quote:
But what you show in your posts, tpreitzel, is pure spite and trolling, coming from a person who has gotten stuck in the use of a deprecated distro called Bluewhite64. Go ahead, "continue" the "process started by Eric". I would not want to infest my Slackware64 computer with broken-by-design ideas originating from Bluewhite64. Eric |
Eric --
Please allow me to express my sincere gratitide for your multilib packages/ I use the features you built in to multilib every day. I build C-programs on my slackware-64 system that have to run on 32 and 64 bit systems. And because of MSys / MinGW I can also compile the same programs for Windows Systems on my Slackware-64 system with your multilib packages. Please keep up your good work ! Thanks. -- kjh |
I am a satisfied user of the slackware(32) and slackware64, but I do not use multilib at all.
Maybe I'm a fundamentalist of PureARCH, BUT I do not think it's correct, someone to criticize, without evidence, the hard work of AlienBOB! :tisk: If someone thinks he can do the job better than AlienBOB, he must show us his work to see if it's true! Until then, I see just (some) trolling ... :hattip: |
Quote:
I used to have it installed, but at the moment I do not have a need for it (there is no proprietary 32bit software on my computers now). Eric PS Darth Vader, what happened to Darkstar Linux? It seems that http://www.darkstarlinux.ro/ is waiting for content. |
Quote:
Quote:
Quote:
Quote:
Quote:
Shame to Eric for doing futile things and for choosing _himself_ how he helps the community. Let's shoot him. [/irony] Quote:
|
Quote:
Thank you AlienBob for all your effort. I use multilib for Wine and I very much appreciate that I'm able to compile my own packages thanks entirely to your multilib system. |
Quote:
About Darkstar Linux. As you know, Darkstar = Slackware + graphics tools and (automated) dependencies. The downside is that ALICE/YaLI (our suite of graphics tools) was written in Qt3 and is outdated today. Now we are working on porting of ALICE/YaLI into Qt4, with many improvements. About our site. Well, the current version is fresh and still is not ready, we work in the unpublished manner at its structure and functionality (and I hate the image management used by Drupal!) :) Finally, even we think that our graphical tools are not of interest to our upstream, yet we prepare two utilities that can work very well in (pure) Slackware. It's about pkgBuild, that is a rpmbuild-like package builder for Slackware, and CParted, which is similar in functionality to GParted, but ... is a pure console tool. :) PS. I apologize to all for this off-topic post! :) |
Quote:
Quote:
Why my own init scripts? Just to see if I could. |
All times are GMT -5. The time now is 09:37 AM. |