FreeBSD i386 -> amd64

Автор: oleg , 8 февраля 2019

Использовал/читал предварительно

wiki.freebsd.org
lissyara.su (migration from i386 to amd64 article)
и ещё что-то по теме, с хабра..

Но везде для 11.2 было не всё корректно, и так собрал все шаги тут

Дано:

arc-5.21p                          =   up-to-date with index
arj-3.10.22_7                      =   up-to-date with index
ca_root_nss-3.40                   =   up-to-date with index
clamav-0.100.2                     =   up-to-date with index
curl-7.61.1                        =   up-to-date with index
dialog4ports-0.1.6                 =   up-to-date with index
dmidecode-3.2                      =   up-to-date with index
expat-2.2.6_1                      =   up-to-date with index
fontconfig-2.12.6,1                =   up-to-date with index
freetype2-2.9.1                    =   up-to-date with index
gettext-runtime-0.19.8.1_1         =   up-to-date with index
gmake-4.2.1_2                      =   up-to-date with index
iftop-1.0.p4                       =   up-to-date with index
indexinfo-0.3.1                    =   up-to-date with index
ipsec-tools-0.8.2_6                =   up-to-date with index
isc-dhcp44-server-4.4.1_3          =   up-to-date with inde
xjbigkit-2.1_1                      =   up-to-date with index
jpeg-8_7                           =   up-to-date with index
json-c-0.13.1                      =   up-to-date with index
lha-1.14i_8                        =   up-to-date with index
libedit-3.1.20170329_2,1           =   up-to-date with inde
xlibgd-2.2.5,1                      =   up-to-date with index
libiconv-1.14_11                   =   up-to-date with index
libltdl-2.4.6                      =   up-to-date with index
libxml2-2.9.7                      =   up-to-date with index
lightsquid-1.8_4                   =   up-to-date with index
lua52-5.2.4                        =   up-to-date with index
mini_httpd-1.30                    =   up-to-date with inde
xopendkim-2.10.3_11                 =   up-to-date with index
p5-CGI-4.40                        =   up-to-date with index
p5-ExtUtils-PkgConfig-1.16         =   up-to-date with index
p5-GD-2.68                         =   up-to-date with index
p5-HTML-Parser-3.72                =   up-to-date with index
p5-HTML-Tagset-3.20_1              =   up-to-date with index
pcre-8.42                          =   up-to-date with index
perl5-5.26.2                       =   up-to-date with index
pkg-1.10.5_5                       =   up-to-date with index
pkgconf-1.5.4,1                    =   up-to-date with index
png-1.6.35                         =   up-to-date with index
portmaster-3.19_18                 =   up-to-date with index
sarg-2.3.11                        =   up-to-date with index
squid-4.3_1                        =   up-to-date with index
tiff-4.0.9_1                       =   up-to-date with index
unzoo-4.4_2                        =   up-to-date with index
vim-console-8.1.0443               =   up-to-date with index

System:    Host: XXX.YYY.ru Kernel: FreeBSD 11.2-RELEASE-p4 i386 bits: 32 compiler: clang v: 6.0.0 Console: tty 0 
           dm: N/A OS: FreeBSD 11.2-RELEASE-p4 
Machine:   Type: Desktop System: Gigabyte product: H110-D3 v: N/A serial: N/A 
           Mobo: Gigabyte model: H110-D3-CF serial: N/A BIOS: American Megatrends v: F23 rev: 5.12 date: 12/14/2017 
           rom size: 8192 kB 
Memory:    RAM: total: 2.88 GiB used: 2.80 GiB (97.2%) 
           Array-1: capacity: 64 GiB slots: 4 EC: None max module size: 16 GiB note: est. 
           Device-1: ChannelA-DIMM0 size: 4 GiB speed: 2133 MT/s type: DDR4 detail: synchronous bus width: 64 bits 
           total: 64 bits manufacturer: Kingston part-no: 9905665-014.A00G serial: 9yyyyyyD 
           Device-2: ChannelA-DIMM1 size: No Module Installed 
           Device-3: ChannelB-DIMM0 size: 4 GiB speed: 2133 MT/s type: DDR4 detail: synchronous bus width: 64 bits 
           total: 64 bits manufacturer: Kingston part-no: 9905665-014.A00G serial: 9yyyyyyD 
           Device-4: ChannelB-DIMM1 size: No Module Installed 
CPU:       Topology: Dual Core model: Intel Pentium G4500 bits: 64 type: MCP arch: N/A L1 cache: 128 KiB L2 cache: N/A 
           L3 cache: 3072 KiB 
           features: lm nx pae sse sse2 sse3 ssse3 vmx 
           Speed: 3504 MHz min/max: 800/3500 MHz Core speeds (MHz): No speed data found for 2 cores. 
Graphics:  Device-1: Intel HD Graphics 530 driver: vgapci bus ID: 0:0:2.0 chip ID: 8086:1912 
           Display: server: No display server data found. Headless machine? tty: 190x54 
           Message: Unable to show advanced data. Required tool glxinfo missing. 
Audio:     Device-1: Intel Sunrise Point-H HD Audio driver: hdac bus ID: 0:0:31.3 chip ID: 8086:a170 
Network:   Device-1: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet driver: re port: N/A bus ID: 0:2:0.0 
           chip ID: 10ec:8168 
           IF: re0 state: no mac: 11:22:33:44:55:66 
           Device-2: Realtek RTL-8100/8101L/8139 PCI Fast Ethernet Adapter driver: rl port: N/A bus ID: 0:4:0.0 
           chip ID: 10ec:8139 
           IF: rl0 state: active speed: 100baseTX duplex: full-duplex mac: 77:88:99:aa:bb:cc 
           Device-3: D-Link System DGE-528T Gigabit Ethernet Adapter driver: re port: N/A bus ID: 0:4:1.0 chip ID: 1186:4300 
           IF: re1 state: active speed: 1000baseT duplex: full-duplex mac: dd:ee:ff:00:11:22 
           Device-4: Intel 82574L Gigabit Network driver: em port: N/A bus ID: 0:6:0.0 chip ID: 8086:10d3 
           IF: em0 state: active speed: 100baseTX duplex: full-duplex mac: 33:44:55:66:77:88 
           Device-5: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet driver: re port: N/A bus ID: 0:7:0.0 
           chip ID: 10ec:8168 
           IF: re2 state: no mac: 99:aa:bb:cc:dd:ee 
Drives:    Local Storage: total: 418.47 GiB used: 28.82 GiB (6.9%) 
           ID-1: /dev/ada0 vendor: Seagate model: ST3160827AS 3.42 size: 145.56 GiB speed: 150MB/s serial: 4LJxxxx6 
           ID-2: /dev/ada1 vendor: Seagate model: ST3300822AS 3.AAE size: 272.91 GiB speed: 300MB/s serial: 4NFxxxxA 
Partition: ID-1: / size: 142.72 GiB used: 8.51 GiB (6.0%) fs: ufs dev: /dev/mirror/zerkalo 
           ID-2: swap-1 size: 4.00 GiB used: 30.4 MiB (0.7%) fs: swap dev: /dev/ada1p3 
Sensors:   Platform: No Freebsd support. Is a comparable sensors tool available? 
Info:      Processes: 66 Uptime: 29d 57m Init: init (BSD) v: N/A Compilers: gcc: N/A clang: 6.0.0 Shell: tcsh v: 6.20.00 
           running in: tty 0 pinxi: 3.0.27-6 

=>       34  312581741  ada0  GPT  (149G)
         34        128     1  freebsd-boot  (64K)
        162  304086912     2  freebsd-ufs  (145G)
  304087074    8388608     3  freebsd-swap  (4.0G)
  312475682     106093        - free -  (52M)

=>       34  586072301  ada1  GPT  (279G)
         34        128     1  freebsd-boot  (64K)
        162  304086912     2  freebsd-ufs  (145G)
  304087074    8388608     3  freebsd-swap  (4.0G)
  312475682  273596653     4  freebsd-ufs  (130G)

$ glabel status
                                      Name  Status  Components
gptid/dd501c06-4057-11e1-8ab4-0011d875add1     N/A  ada0p1
gptid/6f9b195e-41d7-11e1-b6b0-0011d875add1     N/A  ada1p1
                         label/not_in_raid     N/A  ada1p4
gptid/dd52810f-4057-11e1-8ab4-0011d875add1     N/A  ada0p3

mirror/zerkalo  COMPLETE  ada0p2 (ACTIVE)
                          ada1p2 (ACTIVE)

/etc/fstab
# Device	Mountpoint	FStype	Options	Dump	Pass#
/dev/mirror/zerkalo	/	ufs	rw	1	1
#/dev/ada0p3		none	swap	sw	0	0
/dev/ada1p3		none	swap	sw	0	0
/dev/label/not_in_raid	/mnt	ufs	rw,failok	2	2
#/dev/ada1p4		/mnt	ufs	rw,failok	2	2

ПЛАН:

1. ставим amd64 систему на ada0p3 и настраиваем пароли/логины, и только sshd + amd64 ядро в /boot/kern64 1.1. не забыть про файлы fstab passwd* sshd.conf hosts.allow resolv.conf
2. грузимся в неё по nextboot -o 'vfs.root.mountfrom="ufs:/dev/ada0p3' -k kern64
3. собираем world и generic ядро, монтируем старую систему и ставим всё туда + mergemaster

log:

1. newfs -U -n ada0p3
mount /dev/ada0p3 /media/
cd /usr/src && daemon -fo /tmp/iw.amd64 make installworld TARGET=amd64 TARGET_ARCH=amd64 DESTDIR=/media/
cd etc/ && daemon -fo /tmp/dstr.amd64 make distribution TARGET=amd64 TARGET_ARCH=amd64 DESTDIR=/media/
>> install -o root -g wheel -m 644  /usr/src/etc/sendmail/freebsd.mc freebsd.cf /media//etc/mail
>> install: freebsd.cf: No such file or directory
>> *** Error code 71
>> 
>> Stop.
pushd /usr/src/etc/sendmail && touch freebsd.cf freebsd.submit.cf && popd
daemon -fo /tmp/dstr.amd64-1 make distribution TARGET=amd64 TARGET_ARCH=amd64 DESTDIR=/media/
cd .. && daemon -fo /tmp/ikern.amd64 make installkernel TARGET=amd64 TARGET_ARCH=amd64 DESTDIR=/media/
cp -rp /media/boot/kernel /boot/kernel.amd64
cp -vp /boot/loader.conf /media/boot/
cd /media/
>> copy from /etc: group host.conf master.passwd passwd pwd.db spwd.db ssh/ssh_host_dsa_key ssh/ssh_host_dsa_key.pub ssh/ssh_host_ecdsa_key ssh/ssh_host_ecdsa_key.pub ssh/ssh_host_ed25519_key ssh/ssh_host_ed25519_key.pub ssh/ssh_host_key ssh/ssh_host_key.pub ssh/ssh_host_rsa_key ssh/ssh_host_rsa_key.pub
>> $ cat fstab 
# Device	Mountpoint	FStype	Options	Dump	Pass#
#/dev/mirror/zerkalo	/	ufs	rw	1	1
/dev/ada0p3	/	ufs	rw	1	1
#/dev/ada0p3		none	swap	sw	0	0
/dev/ada1p3		none	swap	sw	0	0
/dev/label/not_in_raid	/mnt	ufs	rw,failok	2	2
#/dev/ada1p4		/mnt	ufs	rw,failok	2	2
>> $ cat rc.conf
hostname=xx.yy.ru
ifconfig_em0='inet xx.yy.zzz.230 netmask 255.255.255.252'
defaultrouter=xx.yy.zzz.229
sshd_enable=YES
dumpdev=NO
firewall_enable=NO
local_unbound_enable=YES
sendmail_enable=NO
fsck_y_enable=YES
>>
cp -vp ~/.tcshrc ../root/
cp -p /etc/nsswitch.conf /media/etc/
nextboot -e vfs.root.mountfrom="ufs:/dev/ada0p3" -k kernel.amd64
         ^^^
нет. Фиг!!!
пришлось ехать
вот как надо было:
$ cat /boot/_amd64.nextboot.conf 
nextboot_enable="YES"   
vfs.root.mountfrom="ufs:ada0p3"
kernel="kernel.amd64"
$ gmirror status
          Name    Status  Components
mirror/zerkalo  COMPLETE  ada0p2 (ACTIVE)
                          ada1p2 (ACTIVE)
ada1p2 - remove (backup), then fsck && try to mount

маунтим zerkalo и собираем опять всё из сорцов т.к.

daemon -fo /tmp/iw make installworld TARGET=amd64 TARGET_ARCH=amd64 DESTDIR=/media/
--------------------------------------------------------------
>>> Installing everything
--------------------------------------------------------------
cd /media/usr/src; make -f Makefile.inc1 install
===> lib (install)
===> lib/csu (install)
===> lib/csu/amd64 (install)
cc -target x86_64-unknown-freebsd11.2 --sysroot=/usr/obj/media/usr/src/tmp -B/usr/obj/media/usr/src/tmp/usr/bin -O2 -pipe -I/media/usr/src/lib/csu/common  -I/media/usr/src/lib/libc/include -fno-omit-frame-pointer    -std=gnu99  -Wsystem-headers -Werror -Wall -Wno-format-y2k -W -Wno-unused-parameter -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch -Wshadow -Wunused-parameter -Wcast-align -Wchar-subscripts -Winline -Wnested-externs -Wredundant-decls -Wold-style-definition -Wno-pointer-sign -Wthread-safety -Wno-empty-body -Wno-string-plus-int -Wno-unused-const-variable  -Qunused-arguments  ERROR-tried-to-rebuild-during-make-install -S -o crt1.s /media/usr/src/lib/csu/amd64/crt1.c
/tmp/install.rXK3ejX9/sh: cc: not found
*** Error code 127

Stop.
make[6]: stopped in /media/usr/src/lib/csu/amd64
*** Error code 1

Stop.
make[5]: stopped in /media/usr/src/lib/csu
*** Error code 1

Stop.
make[4]: stopped in /media/usr/src/lib
*** Error code 1

Stop.
make[3]: stopped in /media/usr/src
*** Error code 1

Stop.
make[2]: stopped in /media/usr/src
*** Error code 1

Stop.
make[1]: stopped in /media/usr/src
*** Error code 1

Stop.
make: stopped in /media/usr/src

ну и стандартно:

cd /usr/src; daemon -fo /tmp/bw.log make -j`sysctl -n hw.ncpu` buildworld DESTDIR=/media/
daemon -fo /tmp/bkern.log make -j`sysctl -n hw.ncpu` buildkernel DESTDIR=/media/
daemon -fo /tmp/iw.log make installworld DESTDIR=/media/
daemon -fo /tmp/ikern.log make  installkernel DESTDIR=/media/
daemon -fo /tmp/merge.log /usr/sbin/mergemaster -aCt /tmp/root.diff -D /media/

контролировать процесс можно командой типа такого:

egrep '^>+' [logfile] ; pgrep -fd, '^(make|c[c+]+|ld)' && tail -3 [logfile] | sed -E 's/^(.{144}).+$/\1.../' || printf '\nThat'\''s all, dude\n\n' ; uptime

подставляя вместо [logfile] нужный лог

----------------------------------
--- take2 i386 -> amd64 @dive1 ---
----------------------------------
1. коментируем swap1 в /etc/fstab и монтируем её так, чтобы /usr/obj был на нём
$ glabel status
                                      Name  Status  Components
...
                                 gpt/swap1     N/A  ada0p2
2. newfs -U -n ada0p2
   mount /dev/ada0p2 /mnt/
--   mkdir -p /mnt/usr/obj
--   mv -v /usr/obj /usr/obj.org && ln -sf /mnt/usr/obj /usr/
-- ??? /usr/src/Makefile:MAKEOBJDIRPREFIX?=	/usr/obj
-- because of not enough space --
   daemon -fo /tmp/bw_amd.log make world TARGET=amd64 TARGET_ARCH=amd64 DESTDIR=/mnt/

Комментарии