User Tools

Site Tools


32 to 64 migration notes: have that web site open… the steps are here, but the explanation is there

my notes:

  • 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 you have an *identically* up to date 64bit machine (vm?) to copy libraries from
mkdir /migration-backup
cp /etc/portage/make.conf /migration-backup/
  • building cross compiler
emerge crossdev -av

convert /etc/portage/package.* into directories

crossdev -S -s3 --target x86_64-pc-linux-gnu
  • compile x86_64 kernel with ia32 emulation, reboot into it
  • get an identical VM with compat arch processor built in x86_64 multilib profile (make sure CFLAGS is *identical* emerge -e world if not - also make sure USE flags are the same, makes live easier when doing emerge -k binarypackage on the other side)
  • Change CHOST to x86_64-pc-linux-gnu
  • copy lib and /usr/lib and /bin and /usr/bin and /sbin and /usr/sbin to /migration-backup
  • make /etc/env.d/99migration with LDPATH=/migration-backup/lib:/lib32:/lib64:/migration-backup/usr/lib:/usr/lib32:/usr/lib64
source /etc/profile
mkdir /lib32
mkdir /lib64
mkdir /usr/lib32
mkdir /usr/lib64
  • If applicable, dont use distcc till its remerged:
rm -Rf /usr/lib/distcc    
  • possibly dont need to do this if using binary packages from donor VM
cp -ar /usr/x86_64-pc-linux-gnu/lib64/* /lib64
cp -ar /usr/x86_64-pc-linux-gnu/usr/lib64/* /usr/lib64/

cp -ar /usr/include /migration-backup/include32
cp -ar /usr/x86_64-pc-linux-gnu/usr/include/* /usr/include/
emerge -1 sys-kernel/linux-headers
  • put -sandbox -usersandbox in features
  • add */* abi_x86_32 to package.use
  • most 32bit doesnt get built on stable unless u do this:
# cat /etc/portage/profile/use.mask
  • change make.profile symlink to point to a multilib amd64 profile
  • use quickpkg on source VM to grab and then PATH=“/migration-backup/bin:/migration-backup/usr/bin:/migration-backup/sbin:/migration-backup/usr/sbin:${PATH}” emerge -1kav to deploy initial binary packages donated from prebuilt VM from /usr/portage/packages:

Of these, glibc needs to come first, then everything else will come good. in the process of deploying glibc, /lib needs to be a symlink to /lib64 which will break 32bit programs. ldconfig is your friend here with the above 99migration env file. Theres a couple other gotchas as well that need working through.

  • on donor pc or VM:
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.6* bash readline findutils install-xattr bzip2 tar xz-utils make grep patch gawk sed libpcre
  • on target pc, mount or rsync /usr/portage/packages and emerge -1k to install them. If theres any differences in USE, set them in the prefix
USE="fix any differences" emerge -1kav <pasted list>
mv /usr/lib to /usr/oldlib and symlink lib to lib64
  • /usr/lib symlink creation will break python. The following will not create orphans as the files are in exactly the same location from portage's point of view.
cd /usr/oldlib
mv python-exec python3.6 libpython* portage gcc ../lib64
  • remove crossdev packages (and crossdev) and check gcc sanity
emerge --unmerge cross-x86_64-pc-linux-gnu/* crossdev -av
  • fix 32bit toolchain and python in wrong directory by running:
emerge -1kav sys-devel/gcc glibc mpfr mpc binutils 
binutils-config 1
. /etc/profile

emerge -1av python-exec 
emerge -1kav =python-3.6* --binpkg-changed-deps=n

mv /lib/modules /lib64
mv /lib/gentoo /lib64
  • for the lib / lib64 link ↔ switcheroo
  • * make sure busybox is functional. run this from busybox
  • * have a few shells open, in case you break the one you're working from
mv /lib/modules /lib64
mv /lib/gentoo /lib64

cd /
mv lib oldlib
ln -s lib64 lib
  • 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
emerge gcc -1av
  • remove /etc/env.d/99migration, env-update, ldconfig, sanity check.
  • copy over a valid /etc/nsswitch.conf
  • @system rebuild - adjust USE as needed
FEATURES="-sandbox -usersandbox" USE="-X -gtk -qt5 -introspection -cairo -gpm -consolekit -policykit -net -ipv6 -spell -sqlite -nls -berkdb -gdbm -openssl" emerge -1eav @system
  • remove -sandbox and -usersandbox from features
  • check for i686 compiler orphans with: qfile -o /usr/bin/i686-pc-linux-gnu-*

emerge -eav –keep-going @world

Things to do later
  • uncomment LINGUAS from make.conf
  • take out /etc/env.d/99migration
  • remove /migration-backup
  • erase /usr/portage/packages (whole dir)
  • remove abi_x86_32 from package.use and profiles/use.mask, then emerge –newuse
  • clean up /lib.old and /usr/lib.old
  • 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
cd /lib32 ; find  -xdev -type f -exec qfile -o {} + |less
64bit-migration.txt · Last modified: 2019/01/15 17:48 by snarg