官方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