freebsd-rustdate로 14.1-RELEASE에서 14.2-RELEASE로 업그레이드하기
freebsd-rustdate
freebsd-rustdate라는 프로젝트를 최근에 보게 되었습니다. 기존의 freebsd-update(8)을 rust로 재구현한 프로젝트라고 하는데, 기존 도구와 호환성도 있고 기존의 FreeBSD 업데이트 서버를 이용하고 있다고 하여 큰 주의사항 없이 시도해 볼 수 있겠다는 생각이 들었습니다. 이번에는 개인 서버를 업그레이드하는데 사용해 보았습니다.
결론적으로는 문제없이 잘 동작하였습니다. 기존에 설치되어 있던 FreeBSD 14.1-RELEASE 은 소스에서 빌드한 것이라 업데이트가 가능할지 궁금하였는데 아마 업그레이드라서 그랬는지는 모르겠지만 기존 바이너리는 그대로 덮어 쓰는 것으로 보입니다.
이 도구는 pkg 에서 구할 수 있으므로, 홈페이지에 나와 있는 것 처럼 소스에서 설치해도 되지만 그대로 pkg 를 이용하면 됩니다.
# pkg install freebsd-rustdate
이 글을 쓰는 시점에서의 최신 버전은 1.0.1 이었습니다.
% pkg info freebsd-rustdate
freebsd-rustdate-1.0.1_2
Name : freebsd-rustdate
Version : 1.0.1_2
Installed on : Sun Dec 8 13:41:49 2024 UTC
Origin : sysutils/freebsd-rustdate
Architecture : FreeBSD:14:amd64
Prefix : /usr/local
Categories : sysutils
Licenses : BSD2CLAUSE
Maintainer : [email protected]
WWW : https://rustdate.over-yonder.net/
Comment : Faster freebsd-update replacement
FreeBSD 14.1-RELEASE 에서 14.2-RELEASE로 업그레이드
현재 버전을 확인해 봅니다.
% freebsd-version -ku
14.1-RELEASE
14.1-RELEASE
이제 FreeBSD 14.2 로 업그레이드를 시작해 봅니다.
# sudo freebsd-rustdate upgrade -r 14.2-RELEASE
Currently running 14.1-RELEASE.
Loading info for 14.1-RELEASE.
Trying server update2.freebsd.org.... OK.
Loading metadata index for 14.1-RELEASE... OK.
Getting metadata files for 14.1-RELEASE... 2 missing.
...
기존 서버가 GENERIC커널을 그대로 쓰지 않고 다른 커널 설정을 사용하고 있었는데, 업그레이드하면서 덮어 쓰겠다는 의미입니다. 제 경우는 덮어 써도 문제가 없어서 그대로 두었는데 커널을 다시 빌드하지 않으면 부팅이 안되거나 하는 경우라면 주의해야 합니다.
WARNING -- WARNING -- WARNING
This system is running a *** kernel, which is not
a distributed kernel config. As part of upgrading, this
kernel will be replaced with a GENERIC kernel.
WARNING -- WARNING -- WARNING
나머지 과정이 진행 됩니다.
...
Trying to merge 4 files.
4 files merged cleanly.
Run `freebsd-rustdate show-merges` to review.
Upgrade will remove 9 files, add 56 files, and update 6838 files.
Run `freebsd-rustdate show-merges` to review merge results.
Run `freebsd-rustdate show-install` to see details of what will be installed.
Run `freebsd-rustdate install` to upgrade from 14.1-RELEASE to 14.2-RELEASE.
업데이트할 파일을 받아서 설치하고, /etc
아래 설정 파일을
자동으로 병합해 줍니다. 이번 경우에는 자동으로 처리 되었는데
필요하면 수동으로 병합해 주어야 할 수 있습니다. 직접 보지는
못했는데 아마 기존 etcmerge 랑 비슷할 거라 봅니다.
show-merges
해도 잘 병합 된 것을 (다른 점이 없음) 알 수 있습니다.
# freebsd-rustdate show-merges
Pending upgrade from 14.1-RELEASE to 14.2-RELEASE.
4 merged files
diff /etc/group
--- /etc/group (original)
+++ /etc/group (modified)
diff /etc/master.passwd
--- /etc/master.passwd (original)
+++ /etc/master.passwd (modified)
diff /etc/shells
--- /etc/shells (original)
+++ /etc/shells (modified)
diff /etc/sysctl.conf
--- /etc/sysctl.conf (original)
+++ /etc/sysctl.conf (modified)
이제 freebsd-rustdate install
을 실행해서 커널을 설치 합니다.
# freebsd-rustdate install
Installing pending upgrade from 14.1-RELEASE to 14.2-RELEASE
Checking required files are present... 10848 hashfiles... Ok.
...
Kernel updates have been installed. Please reboot and run
`freebsd-rustdate install` again to finish installing updates.
Note: you may need to update your UEFI bootblocks.
커널이 설치 되었으므로 리부팅합니다.
# reboot
재부팅이 안되면 콘솔로 접속해서 어떤 문제인지 살펴 보기 바랍니다. 필요하면 이전 버전 커널로 다시 부팅해야 합니다. 제 경우에는 문제없이 ssh 연결이 다시 가능 했습니다.
% freebsd-version -ku
14.2-RELEASE
14.1-RELEASE
커널만 14.2-RELEASE 인 것을 알 수 있습니다. 이제 나머지 부분을 계속해서 설치 합니다.
# freebsd-rustdate install
Installing pending upgrade from 14.2-RELEASE to 14.2-RELEASE
Checking required files are present... 10848 hashfiles... Ok.
Creating snapshot of existing boot environment: (14.2-RELEASE_2024-12-08_132128)... Done.
...
Installing world...
...
Rebuilding passwd db... Done.
Rebuilding login.conf db... Done.
Rebuilding manpage indices... /usr/share/man /usr/share/openssl/man Done.
World update installed.
Deleting 9 paths... Done.
Upgrade complete.
마지막 문장이 출력되면 잘 된 것입니다. 버전을 다시 확인해 봅니다.
% freebsd-version -ku
14.2-RELEASE
14.2-RELEASE
이걸로 업그레이드는 완료 하였습니다만, 한번 더 리부팅하는 편이 깔끔하게 시작할 수 있으니 리부팅을 한번 더 해 줍니다.
# reboot
다시 돌아 오면 다른 문제가 없는지 확인 합니다.
패키지 재설치
기존에 설치된 패키지를 업그레이드 합니다. 깔끔하게 하려면 업그레이드할
필요 없는 동일한 버전이라도 다시 덮어 쓰도록 -f
옵션을 주어서
업그레이드합니다.
# pkg-static upgrade -f
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
Checking for upgrades (268 candidates): 100%
Processing candidates (268 candidates): 100%
The following 238 package(s) will be affected (of 0 checked):
New packages to be INSTALLED:
brotli: 1.1.0,1
p5-Class-Inspector: 1.36
p5-File-ShareDir: 1.118
Installed packages to be UPGRADED:
abseil: 20230125.3 -> 20240722.0
apr: 1.7.3.1.6.3_1 -> 1.7.5.1.6.3_3
bash: 5.2.26_1 -> 5.2.37
boehm-gc: 8.2.6 -> 8.2.8
...
이제 완료입니다! pkg 로 설치한 것 중 부팅할 때 실행되는 것들이 있다면 (네트워크 서비스 등) 깔끔하게 다시한번 리부팅하는 것도 좋겠습니다.
끝으로
freebsd-rustdate
가 생각보다 깔끔하게 실행되어서 놀랐는데,
다음에는 일반 업데이트를 한번 시도해 볼 생각인데 기대가 크네요.
아직 rust 기반 시스템 유틸리티는 없는 것으로 아는데,
FreeBSD 기반 시스템에 도입 논의가 있는 것으로 보이니 향후가 기대 됩니다.