64bit-migration
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
64bit-migration [2021/07/09 09:03] – snarg | 64bit-migration [2023/06/21 12:02] (current) – snarg | ||
---|---|---|---|
Line 3: | Line 3: | ||
This is my method - letting portage track every file and package except glibc and ld-linux.so.2 loader. System and all services can remain running. If this is done correctly only 2 reboots will be required. | This is my method - letting portage track every file and package except glibc and ld-linux.so.2 loader. System and all services can remain running. If this is done correctly only 2 reboots will be required. | ||
+ | * Keep in mind that pre profile 17.1 and post profile 17.1 will be slightly different as /lib and /usr/lib are not symlinks. These differences are noted in the relevant steps. | ||
* make sure system is completely up to date and has been depcleaned, preserved-rebuilt and revdep-rebuild - to clean up old 32bit libraries else lots of work later | * make sure system is completely up to date and has been depcleaned, preserved-rebuilt and revdep-rebuild - to clean up old 32bit libraries else lots of work later | ||
* a full up to date backup of the system is a good idea and has saved me in the past. | * a full up to date backup of the system is a good idea and has saved me in the past. | ||
* make sure you have an *identically* up to date 64bit multilib profile VM to create binary packages on. Ensure CFLAGS is going to be identical, or compatible (" | * make sure you have an *identically* up to date 64bit multilib profile VM to create binary packages on. Ensure CFLAGS is going to be identical, or compatible (" | ||
+ | * You can use a portage tree from git (on both target system and migration VM) using something like: | ||
+ | < | ||
+ | git clone https:// | ||
+ | cd gentoo-git | ||
+ | git checkout `git rev-list -n 1 --first-parent --before=" | ||
+ | #note backticks</ | ||
+ | * keep in mind if using a portage git snapshot like the above, you will need to read this for crossdev, particularly the bit regarding " | ||
+ | * read ahead a few points (or the whole page) when starting a step - several problems may be solved in subsequent notes | ||
+ | * if problems arise with libraries and mismatched ABI binaries, scp them over from the donor VM as needed. subsequent emerge will overwrite them later. | ||
== Steps == | == Steps == | ||
Line 14: | Line 23: | ||
- | * build cross compiler. This will be used for emerging the glibc binary | + | * build cross compiler. This will be used during |
< | < | ||
Line 34: | Line 43: | ||
ldconfig | ldconfig | ||
- | mkdir /lib32 | + | mkdir / |
mkdir /lib64 | mkdir /lib64 | ||
- | mkdir /usr/lib32 | + | mkdir / |
mkdir /usr/lib64 | mkdir /usr/lib64 | ||
Line 46: | Line 55: | ||
cp -ar / | cp -ar / | ||
- | | + | |
+ | cp -ar / | ||
cp -ar / | cp -ar / | ||
Line 54: | Line 64: | ||
< | < | ||
-abi_x86_32</ | -abi_x86_32</ | ||
- | * change make.profile symlink to point to a multilib amd64 profile | + | * change make.profile symlink to point to a multilib amd64 profile. choose 17.0 or 17.1 based on Donor VM profile. be aware of the difference. |
- | * on donor pc or VM: | + | * on donor pc or VM (take note of wildcards, adjust if required): |
- | quickpkg glibc gcc zlib ncurses gmp mpfr util-linux acl attr sandbox coreutils procps binutils libcap mpc cracklib flex =db-5* glib pam pambase =python-3.8* bash readline findutils install-xattr bzip2 tar xz-utils make grep patch gawk sed libpcre dev-libs/ | + | quickpkg glibc gcc zlib ncurses gmp mpfr util-linux acl attr sandbox coreutils procps binutils libcap |
* on source VM, scp -r / | * on source VM, scp -r / | ||
Line 68: | Line 78: | ||
mv /lib oldlib | mv /lib oldlib | ||
- | ln -s lib64 lib | + | ln -s lib64 lib (not on 17.1 - mkdir lib) |
cd /usr | cd /usr | ||
mv lib to oldlib | mv lib to oldlib | ||
- | ln -s lib64 lib | + | ln -s lib64 lib (not on 17.1 - mkdir lib) |
* this will get overwritten by emerge at the appropriate time, but lets the 32bit loader continue to work for now | * this will get overwritten by emerge at the appropriate time, but lets the 32bit loader continue to work for now | ||
Line 78: | Line 88: | ||
ldconfig | ldconfig | ||
- | * /usr/lib symlink creation will break python. The following will not create orphans as the files are in exactly the same location from portage' | + | * /usr/lib symlink creation |
cd /usr/oldlib | cd /usr/oldlib | ||
- | mv python-exec python3.6 libpython* portage gcc ../lib64 | + | mv python-exec python3.6 libpython* portage gcc ../lib/ |
- | cp -r / | + | cp -r / |
* disable collision detection and emerge gcc AND binutils using this method: | * disable collision detection and emerge gcc AND binutils using this method: | ||
- | < | + | < |
* check / | * check / | ||
* continue to deploy initial binary packages using this method (except with collision detection) donated from prebuilt VM from / | * continue to deploy initial binary packages using this method (except with collision detection) donated from prebuilt VM from / | ||
+ | * 202112 notes: had to remove the following files to get glibc binary package to emerge: | ||
+ | < | ||
+ | /bin/date | ||
+ | / | ||
+ | / | ||
+ | /bin/ls | ||
+ | / | ||
+ | / | ||
+ | These can be restored from these binary packages immediately after getting glibc working: | ||
+ | < | ||
+ | To emerge coreutils, working mv command is required. libattr.so.1 and libacl.so.1 (symlinks.. copy the actual libraries) were copied over from donor VM lib64 directories and appropriate symlinks made. These belong to packages acl and attr binary packages which can then be emerged to account for those files. | ||
* If you get into trouble getting 64bit loader working, do this (only if needed): | * If you get into trouble getting 64bit loader working, do this (only if needed): | ||
** backup these: / | ** backup these: / | ||
Line 95: | Line 116: | ||
** restore etc files from above backup | ** restore etc files from above backup | ||
- | * This might not be needed. Fix 32bit toolchain and python in wrong directory by running: | + | |
+ | |||
+ | | ||
< | < | ||
Line 108: | Line 131: | ||
Double check / | Double check / | ||
| | ||
- | < | + | < |
* Emerging gcc needs to be done now, but also acts as a sanity check to see what we've missed. Repeat the quickpkg / emerge -1k steps for missing things | * Emerging gcc needs to be done now, but also acts as a sanity check to see what we've missed. Repeat the quickpkg / emerge -1k steps for missing things | ||
Line 135: | Line 158: | ||
* take out / | * take out / | ||
* remove / | * remove / | ||
- | * erase / | + | * erase / |
* remove abi_x86_32 from package.use and profiles/ | * remove abi_x86_32 from package.use and profiles/ | ||
* clean up /lib.old and / | * clean up /lib.old and / | ||
+ | * check for packages that own files in 32bit directories: | ||
+ | < | ||
* check for orphans in /usr/lib and all the other places. (bin sbin /usr/bin /usr/sbin). For finding orphan files after migration in /lib32, /usr/lib32, /usr/lib64 | * check for orphans in /usr/lib and all the other places. (bin sbin /usr/bin /usr/sbin). For finding orphan files after migration in /lib32, /usr/lib32, /usr/lib64 | ||
< | < | ||
64bit-migration.1625792595.txt.gz · Last modified: 2021/07/09 09:03 by snarg