일단 전제는 다음와 같았다.
- 오래된 노트북이어서 cdrom (또는 iodd등)으로 부팅이 안되는경우
- 유선 랜카드는 달려있는 경우
- 써먹을수 있는 서버는 linux 서버인경우
기본적인 컨셉은 다음과 같다.
- linux 서버에는 dhcp 서버와 tftp 와 NFS 를 세팅하는 것으로 한다.
- 노트북은 pxe 를 통해서 랜카드로 바로 부팅하는것으로 한다.
일단 노트북을 pxe 를 통해서 FreeBSD 로 부팅을 시키는것 까지는 어렵지 않았다(FreeBSD 11.0 rc1 booting 이미지를 사용) 그 과정을 간략하게 정리해보면 다음과 같다.
- 리눅스 서버에 dhcpd 를 설치해서 dhcp 서버를 세팅한다. 이때 dhcp 서버는 pxe 를 통해 network 상의 특정 MAC Address 를 가진 단말에게 pxeboot 이미지의 경로와 NFS 를 사용할 수 있는 정보를 던져준다
- 리눅스 서버에 tftp-ha 를 세팅한다. tftp 를 통해서 pxeboot 및 기본적인 정보를 필요로하는 단말에게 제공할 수 있게 된다.
- 리눅스 서버에 NFS 를 세팅해서 FreeBSD 설치에 대한 이미지를 사용할 수 있도록 한다.
기본적으로 본인은 dhcp 를 공유기 내부에서(dd-wrt) 처리하고자 했으나.. pxelinux 는 가능하지만 FreeBSD 는 이런 부분에 대해 그리 자유롭지 못하다. 방법을 한참 찾다가 linux 서버에 dhcpd 를 설정하니 생각보다 쉽게 해결되었다.
linux 서버에 tftp-ha 와 NFS 에서 사용하게될 파일을 세팅하였다. 배포되고 있는 FreeBSD booting iso 이미지를 loopback mount 해서 파일을 가져올 수 있도록 만든다음, tftp 와 NFS 에서 공통적으로 바라보게될 디렉토리 안쪽에 모두 내용을 복사하였다. pxeboot 에 사용될 tftp root 경로 안쪽의 boot 디렉토리 아래쪽의 몇가지 텍스트 파일을 손봐주면 준비는 ok.
그러나 한가지 문제가 생겼다. 이유는 잘 모르겠지만 FreeBSD 설치용 pxeboot 가 단말애서 실행은 되지만 웬지 모르게 NFS 로 된 root 가 계속 read-only 로 mount 되는 것이었다. 아마도 권한 문제일거라 생각은 되지만… 그걸 찾기에는 시간이 너무 지나버렸다.
혹시나 하는 마음에 usb cdrom 을 단말에 꼽았더니.. 부팅용으로는 인식되지 않던 usb 장비가 인식이 제대로 되는것이었다. 이때 FreeBSD 설치이미지 부팅과정에서 본 내용이 떠올랐다. 본인은 FreeBSD 의 구조에 대해 잘 알지는 못하지만… 대강의 내용을 보니 iso9660 의 spec 에서 허용하는대로 CDROM 의 볼륨레이블 내용대로의 이미지를 찾고 있는듯 했다…. 오호.. 그럼 방법이 있지 않을까? 해서 usb cdrom 에 FreeBSD booting 이미지를 매핑해서(iodd) 부팅을 시켰더니 일단은 성공적으로 usb 의 내용을 root 로 삼아 installer 가 실행되었다. 문제는 여기부터 다시 시작…
이렇게 부팅된 상태는 network device 를 인식은 하지만 IP 를 별도로 세팅하지 않는다. 이유는 잘 모르겠지만 말이다. installer 에서 shell 로 잠시 나온다음 ifconfig 과 route 를 이용해서 ip 과 gateway 는 수동으로 세팅해서 간신히 외부와 인터넷은 되게할 수 있지만….. 문제는 nameserver resolving 이다. /etc/resolv.conf 에 nameserver 에 대한 내용을 아무리 기입해도 shell 에서 exit 하는 순간, 관련된 값이 초기화 되어버린다. 이 부분이 왜 중요하냐면.. booting 이미지는 정말 부팅만 된다. 덕분에 설치에 필요한 각종 파일들을 서버에서 받아와야 하는데… domain resolv 를 하지못하니.. 덕분에 미러서버에 접근할 수도 없고.. 때문에 설치를 진행할 수가 없다. 그래서 /etc/hosts 에 해당되는 domain 을 static 으로 넣을까 했으나.. cdrom 에서 mount 된 부분이므로 역시 readonly 되어버려 편집을 할 수가 없게된다.
어떡할까 고민하다가.. 잘 생각해보니 CDROM 에서 booting 을 mount 한다면.. 그걸 DVD 이미지를 mount 할 수 있게도 가능하지 않을까? 해서 다음과 같은 과정을 간단하게 거쳐보았다.
- 기존의 tftp root 에 편집해두었던 boot 디렉토리를 백업받는다.
- tftp root 디렉토리에 있는 내용을 모두 지운다.
- FreeBSD DVD iso 이미지를 loopback mount 해서 파일을 tftp root 로 모두 옮겨온다
- 백업받은 boot 디렉토리를 원상복귀 시키기 위해 tftp root 에 있는 boot 디렉토리를 지우고 아까 백업받은 내용을 이자리에 배치한다.
기본적으로 FreeBSD 역시 linux 와 마찬가지로 부팅이 되며 kernel 이 로딩되는 시점에서, bios 에서는 최소한의 정보만을 전달받고 나머지는 하드웨어를 다시 스캐닝 해서 정보를 구축한다. 덕분에 부팅시에 바로 인식이 안되던 usb cdrom 이 인식되는건데…. 여튼간에 위의 방법을 적용한다음 DVD 이미지를 usb cdrom 에 넣으니 제대로 부팅성공. 게다가 DVD 이미지이기 때문에 별도로 인터넷에 접근하지도 않는다. installer 를 통한 설치가 끝난 다음에는 network 과 root passwd 에 대한 설정을 마치고.. 재부팅하면 그걸로 성공.
아마도 당분간은 머리가 복잡해서 정리를 하지 않을듯하니 이렇게 간단한 형태로 기록을 남겨둔다. 사용한 인터넷상의 정보들은 내일 출근하면 이 글의 아래쪽에 별도로 정리할 예정.
=======================
FreeBSD 설치 및 기본세팅 – 한국어
http://blog.neo365.net/2678560
PXE Install (Network Installation) of FreeBSD from a Linux Box.
http://www.jzab.de/content/pxe-install-freebsd-linux
FreeBSD install over PXE(No NFS) – Need FreeBSD Machine
http://louwrentius.com/freebsd-101-unattended-install-over-pxe-http-no-nfs.html
Debian PXE install
http://louwrentius.com/automated-install-of-debian-linux-based-on-pxe-net-booting.html
TFTP – 윈디하나의 솔라나라
http://www.solanara.net/solanara/tftp
Diskless Operation with PXE – freebsd.org
https://www.freebsd.org/doc/handbook/network-diskless.html
NFS 서버설정 – Gentoo wiki / systemd
http://gentoo-en.vfose.ru/wiki/Systemd
gentoo NFS utils
https://wiki.gentoo.org/index.php?title=Nfs-utils&redirect=no
dns option setting with ddwrt
https://www.dd-wrt.com/wiki/index.php/DNSMasq_as_DHCP_server
NFS export setting howto – redhat
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/Deployment_Guide/s1-nfs-server-config-exports.html
NFS mounts as read-only file system
https://ubuntuforums.org/showthread.php?t=1645866
FreeBSD network setting basic
http://www.cyberciti.biz/faq/freebsd-setup-default-routing-with-route-command/