我有一台带有 AIX 7.1 的旧 IBM 9111-285 考虑到 Aix 7.2 无法在最旧的 ppc cpu 上启动(这是 power5!),并且 Aix 7.1 已接近 EOL,因为我知道我想在其上安装 Linux。其实我有那些“解决方案”
Linux Debian 11: WORKS ONLY ON PPC64LE, this is BE
Adelie Linux: DON'T BOOT
Linux Debian 12 (is a port for ppc64): boot but..kernel panic.
Centos 6 ppc64: is EOL
Centos 7 ppc64: kernel panic
Gentoo ppc64: Boot and hang after 1 minute with no error, probably a panic.
Opensuse Tumbleweed 发行版有 ppc64 和 ppc64le 的 dvd iso 映像,我启动 cd 并..内核恐慌,因为无法挂载 root 映像,我想可能是因为我的工作站有 IDE DVD,而很多 Linux 发行版现在不支持旧的 ide使用默认内核所以我尝试网络启动,我设置了 dhcp/tftp/bootp 服务器,qemu-system-ppc64 可以启动(转到 openfirmware 提示符,输入 boot net 后,我得到 grub 菜单并开始安装)。使用我的 IBM 工作站,我进入 openfirmware 提示符并...
0 > boot net
BOOTP: chosen-network-type = ethernet,auto,rj45,auto
BOOTP: server IP = 0.0.0.0
BOOTP: requested filename =
BOOTP: client IP = 0.0.0.0
BOOTP: client HW addr = *********
BOOTP: gateway IP = 0.0.0.0
BOOTP: device /pci@800000020000004/pci@2,4/ethernet@1
BOOTP: loc-code U787F.001.DPM5MVH-P1-T5
BOOTP: wait 60 seconds for Spanning Tree ...
BOOTP: BOOTP request fail: 0
BOOTP: BOOTP request fail: 1
BOOTP: BOOTP request fail: 2
BOOTP ERROR: BOOTP request failed, QUIT
!BA010004 !
我尝试指定所有参数并...
0 > boot net:192.168.0.88,core.elf,192.168.0.10,192.168.0.1
BOOTP: chosen-network-type = ethernet,auto,rj45,auto
BOOTP: server IP = 192.168.0.88
BOOTP: requested filename = core.elf
BOOTP: client IP = 192.168.0.10
BOOTP: client HW addr = ****************
BOOTP: gateway IP = 192.168.0.1
BOOTP: device /pci@800000020000004/pci@2,4/ethernet@1
BOOTP: loc-code U787F.001.DPM5MVH-P1-T5
BOOTP: wait 60 seconds for Spanning Tree ...
icmp 5 : redirect
icmp 3 : port unreachable
ERROR: icmp 3
BOOTP: BOOTP request fail: 0
icmp 3 : port unreachable
ERROR: icmp 3
BOOTP: BOOTP request fail: 1
icmp 3 : port unreachable
ERROR: icmp 3
BOOTP: BOOTP request fail: 2
BOOTP ERROR: BOOTP request failed, QUIT
!BA010004 !
有什么解决办法吗?
EDIT1:Ubuntu 16.04 使用此选项可以正常加载(但不要过度选择语言)
boot: install-powerpc64 console=hvc0 console=tty0 console=tty1 console=ttyS0,9600,8,n,1 console=ttyS1,9600,8,n,1
答案1
找到的解决方案:在 9111-285 上使用最新的 ppc64 发行版(opensuse tumbleweed、Debian sid)从网络或 cd 启动是不可能的,因为会出现内核恐慌。可以使用一些技巧来安装带有自定义内核的 ppc64 的 Debian sid (13) 端口。
这就是我安装的方式(你需要一些小技巧:如何创建 fs、知道如何创建 chroot、已知 qemu..)
[U]当然,如果发生损坏,我不承担任何责任。自行承担风险[/U]
a)直接从DVD或者网络安装没用,直接进入内核panic
b)我首先安装了系统(在 qemu-ppc-64 虚拟机上,然后启动它以检查是否正常工作..)并正常工作。
c)现在我们必须为有问题的 9111-285 Ibm 工作站创建自定义内核,因此我在 X86 电脑中启动虚拟机 + USB 空磁盘
#!/bin/bash
CDROM=/dev/sr0
DISCO=linux.qcow2
RAM=4096
BOOT=d
qemu-system-ppc64 -m $RAM \
-boot $BOOT \
-drive file=$DISCO,if=none,id=drive-virtio-disk0 \
-device virtio-scsi-pci,id=scsi \
-device scsi-hd,drive=drive-virtio-disk0 -drive file=/dev/sdd,if=virtio \
-netdev tap,id=n1,ifname=tap1,script=no,downscript=no -device virtio-net,netdev=n1 -smp 4 -cdrom $CDROM -accel tcg -nographic
d)系统启动后,我们想在空磁盘上创建一个带有自定义内核的新系统,因此我们以这种方式对磁盘进行分区(系统将其视为/dev/vda)
fdisk -l /dev/vda
Device Boot Start End Sectors Size Id Type
/dev/vda1 * 2048 16383 14336 7M 41 PPC PReP Boot
/dev/vda2 16384 558817279 558800896 266,5G 8e Linux LVM
sfdisk -d /dev/vda
label: dos
label-id: 0xc9c164f5
device: /dev/vda
unit: sectors
sector-size: 512
/dev/vda1 : start= 2048, size= 14336, type=41, bootable
/dev/vda2 : start= 16384, size= 558800896, type=8e
e)我们可以按照我们想要的方式格式化vda2分区,我个人使用lvm+ext4,因为安全且经过测试不需要单独的启动分区,我们将lvm root挂载在/mnt
pvcreate /dev/vda2 vgcreate myvg /dev/vda2 lvcreate -n root -L 50G myvg lvcreate -n home -L 50G myvg lvcreate -n swap -L 16G myvg mount /dev/myvg/root /mnt mount /dev/myvg/home /mnt/home
f)我们可以使用debootstrap程序但是..它失败了
g)所以我按照这种奇怪的方式下载了 ppc64 的所有这些东西(忽略丢失的软件包)(站点 debian-packages)
adduser
apt
apt-transport-https
apt-utils
base-files
base-passwd
bash
bash-completion
bsdmainutils
bsdutils
ca-certificates
coreutils
cpio
cron
dash
debconf
debconf-i18n
debian-archive-keyring
debian-ports-archive-keyring
debianutils
diffutils
dmidecode
dmsetup
dpkg
e2fslibs
e2fsprogs
findutils
gcc-6-base
gnupg
gnupg-agent
gpgv
grep
gzip
hostname
ifupdown
init
init-system-helpers
iproute2
iptables
iputils-ping
isc-dhcp-client
isc-dhcp-common
kmod
libacl1
libapparmor1
libapt-inst2.0
libapt-pkg
libapt-pkg6.0
libassuan0
libattr1
libaudit-common
libaudit1
libblkid1
libbsd0
libbz2-1.0
libc-bin
libc6
libcap-ng0
libcap2
libcomerr2
libcrypt1
libcryptsetup4
libcurl3-gnutls
libdb5.3
libdebconfclient0
libdevmapper1.02.1
libdns-export162
libelf1
libestr0
libfastjson4
libfdisk1
libffi6
libgcc-s1
libgcc1
libgcrypt20
libgdbm3
libgmp10
libgnutls30
libgpg-error0
libgssapi-krb5-2
libhogweed4
libhogweed6
libidn11
libidn2-0
libip4tc0
libip6tc0
libiptc0
libisc-export160
libk5crypto3
libkeyutils1
libkmod2
libkrb5-3
libkrb5support0
libksba8
libldap-2.4-2
libldap-common
liblocale-gettext-perl
liblogging-stdlog0
liblognorm5
liblz4-1
liblzma5
libmd0
libmnl0
libmount1
libncurses5
libncursesw5
libnetfilter-conntrack3
libnettle6
libnettle8
libnewt0.52
libnfnetlink0
libnghttp2-14
libnpth0
libp11-kit0
libpam-modules
libpam-modules-bin
libpam-runtime
libpam0g
libpcre2-16-0
libpcre2-8-0
libpcre3
libpipeline1
libpopt0
libprocps6
libpsl5
libreadline7
librtmp1
libsasl2-2
libsasl2-modules-db
libseccomp2
libselinux1
libsemanage-common
libsemanage1
libsepol1
libslang2
libsmartcols1
libsqlite3-0
libss2
libssh2-1
libssl1.0.2
libssl1.1
libstdc++6
libsystemd0
libtasn1-6
libtext-charwidth-perl
libtext-iconv-perl
libtext-wrapi18n-perl
libtinfo5
libtinfo6
libudev1
libunistring0
libunistring5
libustr-1.0-1
libuuid1
libxapian30
libxtables12
libxxhash0
libzstd1
login
logrotate
lsb-base
mawk
mount
multiarch-support
nano
ncurses-base
ncurses-bin
netbase
openssl
passwd
perl-base
pinentry-curses
procps
readline-common
rsyslog
sed
sensible-utils
systemd
systemd-sysv
sysvinit-utils
tar
tasksel
tasksel-data
tzdata
udev
util-linux
vim-common
vim-tiny
wget
whiptail
xxd
zlib1g
zstd
我将其解压到“newroot”/mnt
怎么做?使用这样的脚本
vim script.sh
#!/bin/bash
set -x
ar x $1 && tar -xvf data.tar.?z && rm *z
并对下载的所有 .deb 文件执行它(我将它们放在目录 /mnt/paccgh 中)
cd /mnt find paccgh/ -type f -name *deb -exec ./script.sh {} \;
我们执行 chroot /mnt ..并且有效!
for i in dev proc sys; do mount -o bind -v /$i/ /mnt/$i;done
chroot /mnt
现在在 chroot 中转到带有 .deb 扩展名的软件包列表所在的目录,并使用 dpkg 重新安装它
cd /paccgh dpkg -i --force-all *deb
我们现在有了一个伪就绪系统,使用此命令修复损坏的包
apt -f install
或者这次用 dpkg 再次重新安装,无需强制
dpkg -i *deb
当 dpkg -l 返回没有带有不完整或损坏标志的包时,您就准备好了
dpkg -l|grep -v ii
h) 继续执行这些步骤
° 安装主要软件包:apparmor、systemd、login、openssh-server、iputils、cron、at、acl、passwd、fstools(lvm、mdadm、btrfs-progs、ext2utils 等)
apt -y install lvm mdadm ext2utils openssh-server...
° 配置 fstab(不要使用 /dev/vda* 或 /dev/sda 使用 LABEL 或 UUID,或者重新启动时不会启动,因为现在是 vda 的磁盘在真实机器上变成了 sda)
UUID=1234..... swap swap defaults 0 0 UUID=2345..... / ext4 defaults,acl 1 1 UUID=4585..... /home ext4 defaults,acl 1 2
您可以使用 blkid 获取 uuid
° 配置用户并设置 root 密码
adduser youruser
echo -e 'yourpassword\nyourpassword\n'|passwd root
echo -e 'yourpassword\nyourpassword\n'|passwd youruser
i)现在最重要的事情,自定义内核,我个人是按照这样的方式,我已经下载了最新的它的内核来自 kernel.org(此时为 4.14.328),我将其解压到 /usr/src 中,并使用这种方式创建 Debian 软件包
apt -y install build-essential linux-source bc kmod cpio flex libncurses5-dev libelf-dev libssl-dev dwarves bison
cd /usr/src/linux-4.14.328
对于 .config,我从 Debian 8 ppc64 内核(安装在 9111-285 上的最新系统,没有恐慌)复制了旧配置,并且我做了“制作旧配置”,对于新的“答案”,我从 Gentoo 内核复制了这里从我的 Slackware 内核配置来看,这是最后的.config准备启用。
这样做之后
nice make -j
nprocbindeb-pkg
6-9小时后内核准备就绪..但我不知道为什么它创建一个powerpc包而不是ppc64,我们可以使用force-all安装它
dpkg -i --force-all /usr/src/linux*deb
l) 现在我们只错过 grub 包
apt -y install grub-ieee1275
将其安装到磁盘上
grub-install /dev/vda1
更新 initramfs
update-initramfs -cv -k all
更新grub
update-grub2
l)我们准备好了,退出 chroot,卸载它并关闭虚拟机电源
exit umount /mnt/dev/pts umount /mnt/proc umount /mnt/sys shutdown -h now
m) 现在的大问题...我们的磁盘是 SATA,而 9111-285 使用 scsi 或 ide 磁盘,我们可以使用扩展坞来解决,例如这个(usb2!)插入磁盘并将工作站启动到SMS菜单(您需要串行连接),从livecd(Debian 8)启动并使用dd将SATA磁盘的内容复制到SCSI磁盘,启动时保留usb-sata连接磁盘,系统从 scsi 磁盘启动,但从 USB 磁盘读取(您可以直接从 scsi 启动,但必须从 grub-console 修改 grub)
n)一旦到达linux登录提示符,使用rsync将所有数据从usb-sata磁盘复制到scsi磁盘
使用 rsync 按照这种方式
vim文件.txt
/mnt /proc /sys /dev
执行挂载、rsync..
mount /dev/sda2 /mnt
rsync -avAXHhSP --exclude-from=file.txt / /mnt
for i in dev proc sys;do mount -o bind /$i/ /mnt/$i;done
chroot /mnt
重新创建 initramfs 并修复 fstab
vim /etc/fstab #update uuid's or labels
update-initramfs -cv -k all
重新安装grub并最终使用scsi磁盘重新启动
grub-install /dev/sda1
update-grub2
exit
shutdown -r now