龙芯loongarch实验(3)--在x86_64主机上构建debian/loong64根
  kgYTaWWZjeAa 2023年11月02日 80 0

官方debian分为官方移植和其他移植(ports) 官方移植会得到官方的正式支持,会有正式版发布 其他移植仅有不稳定版(sid/unstable)

loongson 于2023-6-1 开始在debian官方网站构建loongarch架构软件包,硬件架构名为loong64,2023-8-16前仅仅构建了200左右个软件包(应该是手动构建) debian官方于2023-8-16正式宣布loongarch加入debian ports,并开始自动构建软件包 当前debian/loong64仍处在ports,没正式版 软件包见https://deb.debian.org/debian-ports/pool-loong64/ 本篇从debian官方构建loongarch/debian根,目标dpkg正常、apt正常、在线安装正常

一.平台要求 1.宿主 x86_64 debian 13 qemu 8.0.4/qemu-user-static

2.loong64根 loongarch64 debian sid

二.shell提示符

宿主      :  root@debian:/# 和 linlin@debian:~$
loong64根 :  #

三.构建loongarch/debian根过程 本文使用debootstrap构建loong64根,一开始不是很顺利,反复了多次

debootstrap构建其它架构都一次成功,可能loongarch是刚刚加入debian ports,至2023-9-7,难免有一些软件包未自动构建,需手工下载缺失的软件包并安装

下面的过程已是作了总结,只要按以下顺序步骤,就可以顺利完成构建

1.切换到根用户

linlin@debian:~$ su -
密码: 
root@debian:~# 

2.debootstrap 目标根目录是/home/linlin/vm/debloong64/

root@debian:~# debootstrap  --no-check-gpg   --arch=loong64  --variant=minbase  sid /home/linlin/vm/debloong64/ http://deb.debian.org/debian-ports
I: Can't verify that target arch works
I: Retrieving InRelease 
I: Retrieving Packages 
I: Validating Packages 
I: Resolving dependencies of required packages...
I: Resolving dependencies of base packages...
I: Checking component main on http://deb.debian.org/debian-ports...
I: Retrieving apt 2.7.3
I: Validating apt 2.7.3
...(略)
I: Retrieving zlib1g 1:1.2.13.dfsg-3
I: Validating zlib1g 1:1.2.13.dfsg-3
I: Chosen extractor for .deb packages: dpkg-deb
I: Extracting apt...
I: Extracting base-files...
...
I: Extracting usr-is-merged...
I: Extracting zlib1g...
W: Failure trying to run: chroot "/home/linlin/vm/debloong64" /bin/true     <= 失败
W: See /home/linlin/vm/debloong64/debootstrap/debootstrap.log for details
root@debian:~# 

可见出现了Failure,至此,debootstrap还不成功,仅完成解包(Extracting),因为还需chroot根环境下完成安装,但测试chroot失败 官方网站下载很慢,需耐心,大概花费了半个小时 只要以后官方debian/loong64软件包完整了,一条debootstrap命令就能完成构建根,就可以不用看下面的章节

现在暂时还需以下手动安装,来完成debootstrap本应该完成的后半部分工作

3.查看debootstrap后目录结构

root@debian:~# ls -l /home/linlin/vm/debloong64/
总计 48
lrwxrwxrwx  1 root root    7  9月 7日 08:50 bin -> usr/bin
drwxr-xr-x  2 root root 4096  8月24日 21:02 boot
drwxr-xr-x  2 root root 4096  9月 7日 08:50 debootstrap
drwxr-xr-x  4 root root 4096  9月 7日 08:50 dev
drwxr-xr-x 26 root root 4096  9月 7日 08:50 etc
drwxr-xr-x  2 root root 4096  8月24日 21:02 home
lrwxrwxrwx  1 root root    7  9月 7日 08:50 lib -> usr/lib
drwxr-xr-x  2 root root 4096  8月24日 21:02 proc
drwx------  2 root root 4096  8月24日 21:02 root
drwxr-xr-x  2 root root 4096  8月24日 21:02 run
lrwxrwxrwx  1 root root    8  9月 7日 08:50 sbin -> usr/sbin
drwxr-xr-x  2 root root 4096  8月24日 21:02 sys
drwxrwxrwt  2 root root 4096  8月24日 21:02 tmp
drwxr-xr-x 10 root root 4096  9月 7日 08:50 usr
drwxr-xr-x 11 root root 4096  9月 7日 08:50 var
root@debian:~# 

可见bin、sbin、lib是符号链接,符合debian新的目录结构要求

4.创建目录、符号链接lib64,再进一步满足debian新的目录结构,避免usr-is-merged问题

root@debian:~# mkdir /home/linlin/vm/debloong64/usr/lib64
root@debian:~# cd /home/linlin/vm/debloong64
root@debian:/home/linlin/vm/debloong64# ln -s usr/lib64 lib64

5.手工下载缺失的软件包,放到/home/linlin/vm/debloong64/根下 通常手工下载软件包,首先到https://www.debian.org/distrib/packages网站搜索,但现在还未能搜到loong64这个新架构 需直接到https://deb.debian.org/debian-ports/pool-loong64/main/网站下载,但网站目录结构是按源码包名组织,所以不一定能从二进制软件包名得知相应的目录 可以仍然从https://www.debian.org/distrib/packages网站搜索,搜索页左上角会提供源码包名,按源码包名到https://deb.debian.org/debian-ports/pool-loong64/main/进入相应目录下载

如搜索libc6软件包,得知源码包名是glibc,网站目录是https://deb.debian.org/debian-ports/pool-loong64/main/g/glibc/

下面是手工下载好的必须软件包(debootstrap所缺失)

root@debian:/home/linlin/vm/debloong64# ls *.deb
base-passwd_3.6.1+loong64_loong64.deb		 libc-bin_2.36-9+loong64_loong64.deb	      libgcrypt20_1.10.2-2+loong64_loong64.deb
debian-ports-archive-keyring_2023.02.01_all.deb  libc6_2.36-9+loong64_loong64.deb	      libgpg-error0_1.47-2_loong64.deb
gpgv_2.2.40-1.1+loong64_loong64.deb		 libdebconfclient0_0.270+loong64_loong64.deb  sed_4.9-1+loong64_loong64.deb
root@debian:/home/linlin/vm/debloong64# 

6.解包但不安装(debootstrap的Extracting过程实际是使用宿主的dpkg-deb)

root@debian:/home/linlin/vm/debloong64# dpkg-deb --fsys-tarfile libc6*.deb | tar -k -xf -
root@debian:/home/linlin/vm/debloong64# dpkg-deb --fsys-tarfile libc-bin*.deb | tar -k -xf -
root@debian:/home/linlin/vm/debloong64# dpkg-deb --fsys-tarfile libgcrypt*.deb | tar -k -xf -
root@debian:/home/linlin/vm/debloong64# dpkg-deb --fsys-tarfile libgpg-error*.deb | tar -k -xf -
root@debian:/home/linlin/vm/debloong64# dpkg-deb --fsys-tarfile gpgv*.deb | tar -k -xf -
root@debian:/home/linlin/vm/debloong64# dpkg-deb --fsys-tarfile sed*.deb | tar -k -xf -

7.切换根

root@debian:/home/linlin/vm/debloong64# chroot /home/linlin/vm/debloong64 /usr/bin/dash

8.一些脚本使用bash,但loong64根没有该命令,所以需创建其符号链接

# cd /bin
# ln -s dash bash
# cd /
#

9.强制安装libc6

# cd /
# dpkg --force-depends --install libc6*.deb
...
 libc6:loong64 depends on libgcc-s1; however:
  Package libgcc-s1 is not installed.

Setting up libc6:loong64 (2.36-9+loong64) ...
...
# 

10.正常安装libdebconfclient0

# dpkg -i libdebconf*.deb
...
Setting up libdebconfclient0:loong64 (0.270+loong64) ...
# 

11.强制安装base-passwd

# dpkg --force-depends --install base-pass*.deb
...
Unpacking base-passwd (3.6.1+loong64) ...
dpkg: base-passwd: dependency problems, but configuring anyway as you requested:
 base-passwd depends on libselinux1 (>= 3.1~); however:
  Package libselinux1 is not installed.

Setting up base-passwd (3.6.1+loong64) ...
...
# 

12.安装debootstrap下载的软件包(在/home/linlin/vm/debloong64/var/cache/apt/archives)

# cd /var/cache/apt/archives
# ls *.deb
apt_2.7.3_loong64.deb		       libapt-pkg6.0_2.7.3_loong64.deb	      liblz4-1_1.9.4-1+b1_loong64.deb		 libtasn1-6_4.19.0-3_loong64.deb
base-files_13+b1_loong64.deb	       libattr1_1%3a2.5.1-4+b1_loong64.deb    liblzma5_5.4.4-0.1_loong64.deb		 libtinfo6_6.4+20230625-2_loong64.deb
coreutils_9.1-1+b1_loong64.deb	       libaudit-common_1%3a3.1.1-1_all.deb    libmd0_1.1.0-1_loong64.deb		 libudev1_254.1-3_loong64.deb
dash_0.5.12-6_loong64.deb	       libaudit1_1%3a3.1.1-1_loong64.deb      libnettle8_3.9.1-2_loong64.deb		 libunistring5_1.1-2_loong64.deb
debconf_1.5.82_all.deb		       libbz2-1.0_1.0.8-5+b1_loong64.deb      libp11-kit0_0.25.0-4_loong64.deb		 libxxhash0_0.8.1-1+b1_loong64.deb
debian-archive-keyring_2023.4_all.deb  libcap-ng0_0.8.3-1+b1_loong64.deb      libpam-modules-bin_1.5.2-7+b1_loong64.deb  libzstd1_1.5.5+dfsg2-1_loong64.deb
debianutils_5.12_loong64.deb	       libcap2_1%3a2.66-4+b1_loong64.deb      libpam-modules_1.5.2-7+b1_loong64.deb	 login_1%3a4.13+dfsg1-1+b1_loong64.deb
diffutils_1%3a3.8-4+b1_loong64.deb     libcom-err2_1.47.0-2+b1_loong64.deb    libpam-runtime_1.5.2-7_all.deb		 logsave_1.47.0-2+b1_loong64.deb
dpkg_1.22.0_loong64.deb		       libcrypt1_1%3a4.4.36-2_loong64.deb     libpam0g_1.5.2-7+b1_loong64.deb		 mawk_1.3.4.20230808-1_loong64.deb
e2fsprogs_1.47.0-2+b1_loong64.deb      libdb5.3_5.3.28+dfsg2-2_loong64.deb    libpcre2-8-0_10.42-4_loong64.deb		 ncurses-base_6.4+20230625-2_all.deb
findutils_4.9.0-5_loong64.deb	       libext2fs2_1.47.0-2+b1_loong64.deb     libselinux1_3.5-1_loong64.deb		 ncurses-bin_6.4+20230625-2_loong64.deb
gcc-13-base_13.2.0-3_loong64.deb       libffi8_3.4.4-1_loong64.deb	      libsemanage-common_3.5-1_all.deb		 passwd_1%3a4.13+dfsg1-1+b1_loong64.deb
grep_3.11-3_loong64.deb		       libgcc-s1_13.2.0-3_loong64.deb	      libsemanage2_3.5-1_loong64.deb		 perl-base_5.36.0-8+b1_loong64.deb
gzip_1.12-1+b1_loong64.deb	       libgmp10_2%3a6.3.0+dfsg-2_loong64.deb  libsepol2_3.5-1_loong64.deb		 tar_1.34+dfsg-1.2+b1_loong64.deb
hostname_3.23+nmu1+b1_loong64.deb      libgnutls30_3.8.1-4+b1_loong64.deb     libss2_1.47.0-2+b1_loong64.deb		 tzdata_2023c-10_all.deb
init-system-helpers_1.65.2_all.deb     libhogweed6_3.9.1-2_loong64.deb	      libstdc++6_13.2.0-3_loong64.deb		 usr-is-merged_37_all.deb
libacl1_2.3.1-3+b1_loong64.deb	       libidn2-0_2.3.4-1+b2_loong64.deb       libsystemd0_254.1-3_loong64.deb		 zlib1g_1%3a1.2.13.dfsg-3_loong64.deb
# 

1)先强制安装三个软件包

# dpkg --force-depends --install base-files*.deb dpkg*.deb perl-base*.deb
...
Setting up dpkg (1.22.0) ...
...
Setting up perl-base (5.36.0-8+b1) ...
...
Setting up base-files (13+b1) ...
...
# 

2)然后正常安装所有包(通配符*)

# dpkg -i *.deb
Selecting previously unselected package apt.
(Reading database ... 1422 files and directories currently installed.)
Preparing to unpack apt_2.7.3_loong64.deb ...
Unpacking apt (2.7.3) ...
...
Configuring tzdata
------------------

Please select the geographic area in which you live. Subsequent configuration questions will narrow this down by presenting a list of cities, representing the time zones
in which they are located.

  1. Africa  2. America  3. Antarctica  4. Arctic  5. Asia  6. Atlantic  7. Australia  8. Europe  9. Indian  10. Pacific  11. Etc
Geographic area: 5

Please select the city or region corresponding to your time zone.

  1. Aden      10. Bahrain     19. Chongqing  28. Harbin       37. Jerusalem    46. Kuala_Lumpur  55. Novokuznetsk  64. Qyzylorda      73. Tashkent     82. Ust-Nera
...
  6. Aqtobe    15. Bishkek     24. Dubai      33. Irkutsk      42. Kathmandu    51. Makassar      60. Pontianak     69. Shanghai       78. Tokyo        87. Yekaterinburg
...
  9. Baghdad   18. Choibalsan  27. Gaza       36. Jayapura     45. Krasnoyarsk  54. Nicosia       63. Qostanay      72. Taipei         81. Urumqi
Time zone: 69
Current default time zone: 'Asia/Shanghai'    <= 选了亚洲/上海
Local time is now:      Thu Sep  7 09:22:14 CST 2023.
Universal Time is now:  Thu Sep  7 01:22:14 UTC 2023.
Run 'dpkg-reconfigure tzdata' if you wish to change it.

Setting up usr-is-merged (37) ...
...
Setting up libpam-modules-bin (1.5.2-7+b1) ...
Errors were encountered while processing:  <= 下列软件包安装失败
 base-files_13+b1_loong64.deb
 coreutils_9.1-1+b1_loong64.deb
 dpkg_1.22.0_loong64.deb
 e2fsprogs_1.47.0-2+b1_loong64.deb
 findutils_4.9.0-5_loong64.deb
 grep_3.11-3_loong64.deb
 libpam-modules_1.5.2-7+b1_loong64.deb
 login_1%3a4.13+dfsg1-1+b1_loong64.deb
 ncurses-bin_6.4+20230625-2_loong64.deb
 perl-base_5.36.0-8+b1_loong64.deb
 tar_1.34+dfsg-1.2+b1_loong64.deb
 apt
 libapt-pkg6.0:loong64
 libpam-runtime
 libsystemd0:loong64
 passwd
# 

3)继续正常安装手工下载的所有软件包

# cd /
# ls *.deb
base-passwd_3.6.1+loong64_loong64.deb		 libc-bin_2.36-9+loong64_loong64.deb	      libgcrypt20_1.10.2-2+loong64_loong64.deb
debian-ports-archive-keyring_2023.02.01_all.deb  libc6_2.36-9+loong64_loong64.deb	      libgpg-error0_1.47-2_loong64.deb
gpgv_2.2.40-1.1+loong64_loong64.deb		 libdebconfclient0_0.270+loong64_loong64.deb  sed_4.9-1+loong64_loong64.deb
# dpkg -i *.deb
(Reading database ... 3690 files and directories currently installed.)
Preparing to unpack base-passwd_3.6.1+loong64_loong64.deb ...
Unpacking base-passwd (3.6.1+loong64) over (3.6.1+loong64) ...
...
Setting up libgcrypt20:loong64 (1.10.2-2+loong64) ...
Setting up gpgv (2.2.40-1.1+loong64) ...
Processing triggers for libc-bin (2.36-9+loong64) ...
#

4)再次进入/var/cache/apt/archives安装那些第2)小节安装失败的软件包,为方便,就再次正常安装所有

# cd /var/cache/apt/archives       
# dpkg -i *.deb
...
dpkg: regarding e2fsprogs_1.47.0-2+b1_loong64.deb containing e2fsprogs, pre-dependency problem:
 e2fsprogs pre-depends on libblkid1 (>= 2.36)
  libblkid1 is not installed.

dpkg: error processing archive e2fsprogs_1.47.0-2+b1_loong64.deb (--install):
 pre-dependency problem - not installing e2fsprogs
...
dpkg: regarding login_1%3a4.13+dfsg1-1+b1_loong64.deb containing login, pre-dependency problem:
 login pre-depends on libpam-runtime
  libpam-runtime is unpacked, but has never been configured.

dpkg: error processing archive login_1%3a4.13+dfsg1-1+b1_loong64.deb (--install):
 pre-dependency problem - not installing login
...
Setting up apt (2.7.3) ...
Setting up dash (0.5.12-6) ...
Processing triggers for libc-bin (2.36-9+loong64) ...
Errors were encountered while processing:  <= 下列软件包安装失败
 e2fsprogs_1.47.0-2+b1_loong64.deb
 login_1%3a4.13+dfsg1-1+b1_loong64.deb
# 

剩这两个软件包,就不安装了

13.更新软件源

# apt-get update
Get:1 http://deb.debian.org/debian-ports sid InRelease [93.6 kB]
Get:2 http://deb.debian.org/debian-ports sid/main loong64 Packages [12.0 MB]
Fetched 12.1 MB in 9min 58s (20.2 kB/s)                                                                                                                                  
Reading package lists... Done
# 

14.测试apt是否正常

# apt-get install tree
Reading package lists... Done
Building dependency tree... Done
The following NEW packages will be installed:
  tree
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
...
Preparing to unpack .../tree_2.1.1-1_loong64.deb ...
Unpacking tree (2.1.1-1) ...
Setting up tree (2.1.1-1) ...
# 

运行命令

# tree
.
|-- apt_2.7.3_loong64.deb
|-- base-files_13+b1_loong64.deb
...
|-- usr-is-merged_37_all.deb
`-- zlib1g_1%3a1.2.13.dfsg-3_loong64.deb

2 directories, 70 files
# 

可见在线安装正常

15.查看架构

# uname -m
loongarch64
#

至此,根已构建完毕

四.LXC容器 如要使用LXC运行系统容器,可手工配置容器,并设置容器根为/home/linlin/vm/debloong64/,不需lxc-create

五.问题排除记录

1.不断运行ps -ef,监控debootstrap

...
root        3564    1834  0 09:46 pts/0    00:00:00 /bin/sh /usr/sbin/debootstrap --no-check-gpg --arch=loong64 --variant=minbase sid /home/linlin/vm/debloong64/ http://deb.debian.org/debian-ports
root        3676    3564  0 09:46 pts/0    00:00:01 wget -nv -O /home/linlin/vm/debloong64/var/lib/apt/lists/partial/deb.debian.org_debian-ports_dists_sid_main_binary-loong64_Packages.xz http://deb.debian.org/debian-ports/dists/sid/main/binary-loong64/by-hash/SHA256/87f7e3cfa66e228b445b9564c7c5416ef4cb8205f4aeb679d202609bbb06e88a
...
root        4239    4217  0 09:57 pts/0    00:00:00 wget -nv -O /home/linlin/vm/debloong64//var/cache/apt/archives/partial/apt_2.7.3_loong64.deb http://deb.debian.org/debian-ports/pool-loong64/main/a/apt/apt_2.7.3_loong64.deb
...
root       12931    1834  0 10:38 pts/0    00:00:00 /bin/sh /usr/sbin/debootstrap --no-check-gpg --arch=loong64 --variant=minbase sid /home/linlin/vm/debloong64/ http://deb.debian.org/debian-ports
root       15142   12931  0 10:43 pts/0    00:00:00 /bin/sh /usr/sbin/debootstrap --no-check-gpg --arch=loong64 --variant=minbase sid /home/linlin/vm/debloong64/ http://deb.debian.org/debian-ports
root       15149   15142  0 10:43 pts/0    00:00:00 dpkg-deb --fsys-tarfile .//var/cache/apt/archives/apt_2.7.3_loong64.deb
root       15150   15142  7 10:43 pts/0    00:00:00 tar -k -xf -
root       15151   15149  0 10:43 pts/0    00:00:00 [dpkg-deb] <defunct>
root       15152   15149 61 10:43 pts/0    00:00:00 dpkg-deb --fsys-tarfile .//var/cache/apt/archives/apt_2.7.3_loong64.deb
linlin     15155    3708 28 10:43 pts/1    00:00:00 ps -ef
...

可知debootstrap首先下载http://deb.debian.org/debian-ports/dists/sid/main/binary-loong64/Packages.xz并解压到/home/linlin/vm/debloong64/var/lib/apt/lists/deb.debian.org_debian-ports_dists_sid_main_binary-loong64_Packages 接着按Packages下载所需软件包 然后用dpkg-deb解包

2.debootstrap结束后,测试chroot执行loong64根里的命令

root@debian:~# chroot /home/linlin/vm/debloong64 /usr/bin/dash
loongarch64-binfmt-P: Could not open '/lib64/ld-linux-loongarch-lp64d.so.1': No such file or directory
root@debian:~# 

提示缺少ld-linux文件,可先搜索宿主文件名为ld-linux属于哪个软件包

linlin@debian:~$ dpkg-query -S ld-linux
manpages: /usr/share/man/man8/ld-linux.8.gz
manpages: /usr/share/man/man8/ld-linux.so.8.gz
libc6:amd64: /lib64/ld-linux-x86-64.so.2
libc6:amd64: /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
linlin@debian:~$ 

可见x86_64匹配ld-linux文件名有manpages、libc6,据此推知loong64根缺libc6软件包

3.dpkg-deb解压缺失的软件包 1)解包libc6

root@debian:/home/linlin/vm/debloong64# dpkg-deb --fsys-tarfile libc6*.deb | tar -k -xf -

2)执行loong64根里的命令,根据error提示缺什么就去下载相应的软件包并解包

root@debian:/home/linlin/vm/debloong64# chroot /home/linlin/vm/debloong64 /usr/bin/dpkg --help
Usage: dpkg [<option>...] <command>
...
root@debian:/home/linlin/vm/debloong64#

dpkg命令正常

root@debian:/home/linlin/vm/debloong64# chroot /home/linlin/vm/debloong64 /usr/bin/apt-get --help
/usr/bin/apt-get: error while loading shared libraries: libgcrypt.so.20: cannot open shared object file: No such file or directory
root@debian:/home/linlin/vm/debloong64#

apt-get --help命令缺libgcrypt20软件包

root@debian:/home/linlin/vm/debloong64# dpkg-deb --fsys-tarfile libgcrypt*.deb | tar -k -xf -
root@debian:/home/linlin/vm/debloong64# chroot /home/linlin/vm/debloong64 /usr/bin/apt-get --help
/usr/bin/apt-get: error while loading shared libraries: libgpg-error.so.0: cannot open shared object file: No such file or directory
root@debian:/home/linlin/vm/debloong64#

仍缺libgpg-error0软件包

root@debian:/home/linlin/vm/debloong64# dpkg-deb --fsys-tarfile libgpg-error*.deb | tar -k -xf -
root@debian:/home/linlin/vm/debloong64# chroot /home/linlin/vm/debloong64 /usr/bin/apt-get --help
apt 2.7.3 (loong64)
Usage: apt-get [options] command
...
root@debian:/home/linlin/vm/debloong64#

apt-get --help命令已正常

3)apt-get update命令

root@debian:/home/linlin/vm/debloong64# chroot /home/linlin/vm/debloong64 /usr/bin/dash
# apt-get update
Hit:1 http://deb.debian.org/debian-ports sid InRelease
Err:1 http://deb.debian.org/debian-ports sid InRelease
  gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed
Reading package lists... Done
W: No sandbox user '_apt' on the system, can not drop privileges
W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: http://deb.debian.org/debian-ports sid InRelease: gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed
W: Failed to fetch http://deb.debian.org/debian-ports/dists/sid/InRelease  gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed
W: Some index files failed to download. They have been ignored, or old ones used instead.
# 

缺gpgv软件包

root@debian:/home/linlin/vm/debloong64# dpkg-deb --fsys-tarfile gpgv*.deb | tar -k -xf -
root@debian:/home/linlin/vm/debloong64# chroot /home/linlin/vm/debloong64 /usr/bin/dash
# apt-get update
Hit:1 http://deb.debian.org/debian-ports sid InRelease
Err:1 http://deb.debian.org/debian-ports sid InRelease
  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B523E5F3FC4E5F2C NO_PUBKEY 8D69674688B6CB36
Reading package lists... Done
W: No sandbox user '_apt' on the system, can not drop privileges
W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: http://deb.debian.org/debian-ports sid InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B523E5F3FC4E5F2C NO_PUBKEY 8D69674688B6CB36
W: Failed to fetch http://deb.debian.org/debian-ports/dists/sid/InRelease  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B523E5F3FC4E5F2C NO_PUBKEY 8D69674688B6CB36
W: Some index files failed to download. They have been ignored, or old ones used instead.
# 

上面提示NO_PUBKEY,但缺少有用的信息来判定少了那些文件、软件包 几经周折,网上搜索,有关软件源GPG问题的软件包名含keyring,到https://www.debian.org/distrib/packages搜索keyring,可得知debian-ports-archive-keyring软件包

软件包:debian-ports-archive-keyring(2023.02.01) GnuPG archive keys of the debian-ports archive The debian-ports archive digitally signs its Release files. This package contains the archive keys used for that.

# dpkg -i debian-port*.deb
dpkg: warning: 'ldconfig' not found in PATH or not executable
dpkg: error: 1 expected program not found in PATH or not executable
Note: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin
# 

正常dpkg安装debian-ports-archive-keyring失败

dpkg-deb解包

root@debian:/home/linlin/vm/debloong64# dpkg-deb --fsys-tarfile debian-port*.deb | tar -k -xf -
root@debian:/home/linlin/vm/debloong64# chroot /home/linlin/vm/debloong64 /usr/bin/dash
# apt-get update
Hit:1 http://deb.debian.org/debian-ports sid InRelease
Reading package lists... Done
W: No sandbox user '_apt' on the system, can not drop privileges  <= 警告而已,不影响
# 

apt-get update命令已正常

4.尝试在线安装

# apt-get install tree
...
 tree : Depends: libc6 (>= 2.36) but it is not installable
E: Unable to correct problems, you have held broken packages.
# 

提示依赖libc6

1)dpkg安装libc6 1.1)早前的debootstrap

# dpkg --force-depends --install libc6*.deb
...
dpkg (subprocess): unable to execute new libc6:loong64 package pre-installation script (/var/lib/dpkg/tmp.ci/preinst): No such file or directory   <= 提示找不到文件,但没说明是什么文件
dpkg: error processing archive libc6_2.36-9+loong64_loong64.deb (--install):
 new libc6:loong64 package pre-installation script subprocess returned error exit status 2
dpkg (subprocess): unable to execute new libc6:loong64 package post-removal script (/var/lib/dpkg/tmp.ci/postrm): No such file or directory
dpkg: error while cleaning up:
 new libc6:loong64 package post-removal script subprocess returned error exit status 2
Errors were encountered while processing:
 libc6_2.36-9+loong64_loong64.deb
# 

因为没明确提示缺少什么文件,排查费了很多工夫,后来查看*.deb软件包里的安装脚本,发现都是以#!/bin/sh开头

# /bin/sh
/usr/bin/dash: 22: /bin/sh: not found
# 

运行/bin/sh不存在,应该就是提示tmp.ci问题所在

1.2)现在的debootstrap已会创建/bin/sh,不会再有tmp.ci问题,所以上面问题可忽略

# ls -l /bin/sh
lrwxrwxrwx 1 0 0 4 Jun 21 11:28 /bin/sh -> dash
# dpkg --force-depends --install libc6*.deb
dpkg: warning: 'ldconfig' not found in PATH or not executable
dpkg: error: 1 expected program not found in PATH or not executable
Note: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin
# 

按照提示约定俗成,warning应该不影响执行(应该仅仅警告而已),'ldconfig'问题应该不会是执行失败的原因? 但dpkg: error的出错信息太少,看不出问题所在,不知error是对warning: 'ldconfig' not found进一步描述还是另有其它期待的命令不存在 没办法,尝试按warning提示,查出宿主ldconfig是在libc-bin软件包

root@debian:/home/linlin/vm/debloong64# dpkg-query -S ldconfig
manpages: /usr/share/man/man8/ldconfig.8.gz
libc-bin: /var/cache/ldconfig
mmdebstrap: /usr/libexec/mmdebstrap/ldconfig.fakechroot
libc-bin: /sbin/ldconfig
python3-speechd: /usr/lib/python3/dist-packages/speechd_config/buildconfig.py
root@debian:/home/linlin/vm/debloong64# 

因此debootstrap缺了libc-bin

解包libc-bin

root@debian:/home/linlin/vm/debloong64# dpkg-deb --fsys-tarfile libc-bin*.deb | tar -k -xf -

1.3)

root@debian:/home/linlin/vm/debloong64# chroot /home/linlin/vm/debloong64 /usr/bin/dash
# dpkg --force-depends --install libc6*.deb
...
/var/lib/dpkg/tmp.ci/preinst: 31: sed: not found    <= 找不到sed
dpkg: error processing archive libc6_2.36-9+loong64_loong64.deb (--install):
 new libc6:loong64 package pre-installation script subprocess returned error exit status 127
Errors were encountered while processing:
 libc6_2.36-9+loong64_loong64.deb
#

经解包libc-bin后,已无'dpkg: error: 1 expected program not found'问题,现在是缺sed

root@debian:/home/linlin/vm/debloong64# dpkg-deb --fsys-tarfile sed*.deb | tar -k -xf -

1.4)

root@debian:/home/linlin/vm/debloong64# chroot /home/linlin/vm/debloong64 /usr/bin/dash
# dpkg --force-depends --install libc6*.deb
...
Unpacking libc6:loong64 (2.36-9+loong64) over (2.36-9+loong64) ...
dpkg: libc6:loong64: dependency problems, but configuring anyway as you requested:
 libc6:loong64 depends on libgcc-s1; however:   <= 因为有此依赖,所以强制安装libc6,而不是正常安装
  Package libgcc-s1 is not installed.

Setting up libc6:loong64 (2.36-9+loong64) ...
...
# 

没有Errors,强制安装libc6成功

5.dpkg安装base-files

# dpkg --force-depends --install base-files*.deb
...
Setting up base-files (13+b1) ...
chown: invalid user: 'root:root'
dpkg: error processing package base-files (--install):
 installed base-files package post-installation script subprocess returned error exit status 1
Errors were encountered while processing:
 base-files
# 

强制安装也出现Errors,提示也没关键信息,这个问题排查也花费了很多时间,后来参考debootstrap脚本,里边强制安装(dpkg --force-depends --install)核心包是如下顺序: base-passwd base-files dpkg libc6 perl-base mawk debconf 依照顺序第一个,先安装base-passwd才不会post-installation script问题

6.dpkg安装usr-is-merged

# apt-get install tree
...
 apt : Depends: base-passwd (>= 3.6.1) but it is not installable or
                adduser but it is not going to be installed
       Recommends: ca-certificates but it is not going to be installed
 init-system-helpers : Depends: usrmerge but it is not going to be installed or
                                usr-is-merged
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).
# 

上面提示存在依赖base-passwd、usr-is-merged(或usrmerge)问题

debootstrap过程中已是按照新的目录结构组织,所以应该只需usr-is-merged断言,不需usrmerge迁移目录结构

# dpkg -i usr-is-mer*.deb
...
******************************************************************************
*
* The usr-is-merged package cannot be installed because this system does
* not have a merged /usr.
*
* Please install the usrmerge package to convert this system to merged-/usr.
*
* For more information please read https://wiki.debian.org/UsrMerge.
*
******************************************************************************


dpkg: error processing archive usr-is-merged_37_all.deb (--install):
 new usr-is-merged package pre-installation script subprocess returned error exit status 1
Errors were encountered while processing:
 usr-is-merged_37_all.deb
# 

提示Errors,并提示安装usrmerge(本文不安装,因为usrmerge依赖太多)

usr-is-merged_37_all.deb包里的preinst脚本里除了判断/bin、/sbin、/lib是否是符号链接,还再判断/lib64是否是符号链接 debootstrap过程/bin、/sbin、/lib已是符号链接

# ls -ld /lib64
drwxr-xr-x 2 0 0 4096 Sep  5 14:51 /lib64
# 

可见/lib64是目录,不是符号链接,所以安装失败,应该debootstrap过程没创建符号链接

1)查看/lib64内容

# ls -l /lib64
total 0
lrwxrwxrwx 1 0 0 56 Jun 25 17:30 ld-linux-loongarch-lp64d.so.1 -> /lib/loongarch64-linux-gnu/ld-linux-loongarch-lp64d.so.1

2)查看x86_64的目录结构

linlin@debian:~$ ls -ld /lib64
lrwxrwxrwx 1 root root 9 2018年11月27日 /lib64 -> usr/lib64
linlin@debian:~$ ls -l /usr/lib64
总计 0
lrwxrwxrwx 1 root root 42  8月 4日 17:55 ld-linux-x86-64.so.2 -> /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
linlin@debian:~$ 

3)按照x86_64的目录结构 loong64根没/usr/lib64,需创建

# cd /
# mkdir /usr/lib64
# cp /lib64/* /usr/lib64/
# exit

4)在宿主下创建lib64符号链接

root@debian:~# mv /home/linlin/vm/debloong64/lib64 /home/linlin/vm/debloong64/lib64-old
root@debian:~# cd /home/linlin/vm/debloong64
root@debian:/home/linlin/vm/debloong64# ln -s usr/lib64 lib64

5)安装usr-is-merged成功

# dpkg -i usr-is-mer*.deb
(Reading database ... 3752 files and directories currently installed.)
Preparing to unpack usr-is-merged_37_all.deb ...
Unpacking usr-is-merged (37) ...
Setting up usr-is-merged (37) ...
# 

7.dpkg安装base-passwd base-passwd软件包是核心包,但在loong64架构是手动构建,不是自动构建

base-passwd依赖libdebconfclient0

# dpkg -i libdebconf*.deb base-pass*.deb
...
Setting up libdebconfclient0:loong64 (0.270+loong64) ...
Setting up base-passwd (3.6.1+loong64) ...
...
# 

安装成功

六.小结 本文手工下载的软件包(即debootstrap缺失)在https://deb.debian.org/debian-ports/pool-loong64/main下是可以找到的,只是https://deb.debian.org/debian-ports/dists/sid/main/binary-loong64/Packages.xz文件里边缺失软件包信息 而debootstrap是根据Packages文件内容信息下载,猜测2023-8-16前手动构建软件包没进入Packages文件

到https://buildd.debian.org/status/搜索glibc的自动构建软件包状态,仍处在失败

至2023-9-8,buildd.debian.org上loong64的软件包状态如下:

软件包               源码包          状态                                说明
------------------------------------------------------------------------------------------
base-passwd         base-passwd     No entry in loong64 database
gpgv                gnupg2          No entry in loong64 database
libc6               glibc           Build-Attempted
libc-bin            glibc           Build-Attempted
libdebconfclient0   cdebconf        No entry in loong64 database       base-passwd依赖此包
libgcrypt20         libgcrypt20     No entry in loong64 database
libgpg-error0       libgpg-error    Installed                          libgcrypt20依赖此包,已自动构建完毕         
sed                 sed             No entry in loong64 database

debian-ports-archive-keyring软件包为所有硬件架构,非特定loong64

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论