site  contact  subhomenews

Hit roadblock building EasyArch

January 21, 2022 — BarryK

Yes, I am building EasyOS based on Arch Linux binary packages.

I had not attempted this previously, partly because Arch is a rolling release. However, a few days ago I discovered that Arch keeps snapshots of all the packages, going back many years. For example, December 31, 2021:

https://archive.archlinux.org/repos/2021/12/31/

I knew that peebee in the Puppy Forum had created a 32-bit Arched-based pup, "arch32pup". I also discovered a few days ago that he has created "arch64pup" -- so I downloaded and booted it. Looks good.

Here is the forum thread on arch32pup:

https://forum.puppylinux.com/viewtopic.php?t=56

I decided to give it a go in woofQ, using that 2021/12/31 snapshot. Had to fix some scripts in woofQ, such as '0setup', but then ran into a serious problem, the filesystem hierarchy...

https://man.archlinux.org/man/file-hierarchy.7.en

I see that peebee has kept the traditional folder hierachy, and I began to see why...

I decided to embrace the Arch folder hierarchy, with, for example, /lib as a symlink to /usr/lib. Unfortunately, this opens a can of worms. It is OK for building EasyOS from Arch binary packages, however, Easy is also constructed with other packages. For example, there is the Linux kernel PET -- when woofQ tries to copy it:

cp: cannot overwrite non-directory 'rootfs-complete/lib' with directory 'linux_kernel-5.10.90-dunfell64/lib'

This is a fundamental problem. The rsync utility has a workaround for this, with the "--keep-dirlinks" option; however, 'cp' doesn't.

It is looking like I will have to keep the traditional folder hierarchy, like peebee has done. That will require a workaround, as non-Arch packages may, for example, have binary executables that expect /lib/libc.so.6 and /lib/ld-linux-x86-64.so.2, or /lib64/libc.so.6 and /lib64/ld-linux-x86-64.so.2

Have to think about it a bit more. Another very hot day here in Perth, Western Australia, hovering around 35 - 40°C for several days. A visit to the ocean is in order, then will look at this again in the evening.

EDIT:
Haven't been to the beach yet, the memory has returned; the Arch symlinks are not such a problem after all. Woof* was designed from scratch to build a distro from a variety of packages, and handles that "cannot overwrite non-directory" problem.

The error shown above is when '3buildeasydistro' script in woofQ copies the Linux kernel to rootfs-complete. However, packages are copied with extra code that handles that problem:

 cp -a --remove-destination packages-${DISTRO_FILE_PREFIX}/${ONEPKG}/* sandbox3/rootfs-complete/ 2> /tmp/3builddistro-cp-errlog
sync
if [ -s /tmp/3builddistro-cp-errlog ];then
...

...the code detects that "cannot overwrite non-directory" in the error file, and copies it correctly.

In the case of copying the kernel, I just did this:

 #20220121 arch-linux, /lib is a symlink...
cp -a --remove-destination $KERNPKGNAMEONLY/* rootfs-complete/ 2> /tmp/3builddistro-cp-errlog
if [ -s /tmp/3builddistro-cp-errlog ];then
cp -a --remove-destination $KERNPKGNAMEONLY/lib/* rootfs-complete/usr/lib/
fi

The PPM (Puppy Package Manager), also known as PETget in EasyOS, also has this special handling when installing packages -- see /usr/local/petget/installpkg.sh.  

Tags: easy