#keywords bootp,dhcp,원격부팅,network,booting,gentoo,젠투,linux,리눅스,pxe,bios,tftp #title BOOTP를 이용한 원격부팅 [wiki:Home 대문] / [wiki:CategoryInstall 설치 및 구축] / [wiki:UsingBOOTP BOOTP를 이용한 원격부팅] ---- == [wiki:UsingBOOTP BOOTP를 이용한 원격부팅] == * 작성자 조재혁([mailto:minzkn@minzkn.com]) * 고친과정 2010년 8월 10일 : 처음씀 [[TableOfContents]] === 시작하기전에 === 필자는 서버와 넷북을 이용하는데 넷북에는 ODD장치가 없습니다. 이 경우 넷북에 OS한번 설치하려면 매우 복잡해집니다. 서버는 있으니 서버로부터 원격 부팅을 할수 있으면 좋겠다는 생각을 많이 했었는데 그 해답이 있었습니다. 바로 BOOTP가 되겠습니다. 이제 PXE를 지원하는 BIOS를 가진 컴퓨터는 모두 원격부팅할수 있게 환경을 구축해보려고 합니다. === Gentoo Linux환경에서 Gentoo LiveCD를 이용한 원격 부팅구축 === 설명의 편의를 위해서 다음과 같은 환경변수를 사용하겠습니다. {{{#!plain export PATH_LIVECD="/mnt/cdrom" export PATH_TEMP="/tftpboot/tmp" export PATH_TFTPROOT="/tftpboot" }}} 1. 작업에 필요한 (임시)디렉토리들을 만듭니다. {{{#!plain mkdir -p ${PATH_LIVECD} mkdir -p ${PATH_TEMP} mkdir -p ${PATH_TEMP}/gentoo.init.dir mkdir -p ${PATH_TFTPROOT} mkdir -p ${PATH_TFTPROOT}/netboot mkdir -p ${PATH_TFTPROOT}/netboot/pxelinux.cfg mkdir -p ${PATH_TFTPROOT}/netboot/gentoo }}} 1. DHCP server를 설치합니다. {{{#!plain emerge net-misc/dhcp }}} {{{#!plain option domain-name "example.com"; option domain-name-servers 168.126.63.1, 168.126.63.2, 210.94.0.7, 164.124.101.2, 203.248.252.2, 210.181.1.24, 203.255.112.34; default-lease-time 600; max-lease-time 7200; # <<< 이 부분 추가 >>> allow booting; allow bootp; ddns-update-style none; log-facility local7; subnet 10.0.0.0 netmask 255.0.0.0 { option broadcast-address 10.255.255.255; option routers 10.0.0.1; # <<< Booting 에 이용할 pxelinux.0의 위치 및 TFTP server IP주소 설정 >>> filename "netboot/pxelinux.0"; next-server 10.0.0.1; pool { range 10.0.0.100 10.0.0.200; allow unknown-clients; } # group { # host bootp_client { # hardware ethernet XX:XX:XX:XX:XX:XX; # fixed-address 10.0.0.200; # } # } } }}} 1. TFTP server를 설치합니다. 이때 주의할것이 netkit-tftp package는 제대로 지원하지 못하므로 tftp-hpa package를 설치하셔야 합니다. 그리고 방화벽이 있는 경우 "/etc/conf.d/in.tftpd"에서 적절한 port대역을 설정해주고 방화벽에서 해당 port대역을 udp에 대하여 허용하도록 해주셔야 합니다. {{{#!plain emerge net-ftp/tftp-hpa }}} 1. syslinux package를 설치하고 필요한 파일들만 "${PATH_TFTPROOT}/netboot" 하위에 복사합니다. {{{#!plain emerge sys-boot/syslinux cp /usr/share/syslinux/pxelinux.0 ${PATH_TFTPROOT}/netboot cp /usr/share/syslinux/memdisk ${PATH_TFTPROOT}/netboot }}} 1. Gentoo minimal install CD image를 다운로드 받습니다. 1. 다운로드 받은 Gentoo minimal install CD image를 "${PATH_LIVECD}"에 mount 합니다. {{{#!plain mount -o loop install-XX-minimal-XXXXXXXX.iso ${PATH_LIVECD} }}} 1. "${PATH_LIVECD}/isolinux/gentoo" 커널파일을 "${PATH_TFTPROOT}/netboot/gentoo"에 복사합니다. {{{#!plain cp ${PATH_LIVECD}/isolinux/gentoo ${PATH_TFTPROOT}/netboot/gentoo }}} 1. gentoo.igz 파일을 임시디렉토리 "${PATH_TEMP}/gentoo.init.dir"에 압축해제합니다. {{{#!plain cd ${PATH_TEMP}/gentoo.init.dir gunzip -c ${PATH_LIVECD}/isolinux/gentoo.igz | cpio -idv }}} 1. "${PATH_TEMP}/gentoo.init.dir/mnt/cdrom"디렉토리를 만들고 그 밑에 "image.squashfs"파일을 복사합니다. {{{#!plain mkdir -p ${PATH_TEMP}/gentoo.init.dir/mnt/cdrom cp ${PATH_LIVECD}/isolinux/image.squashfs ${PATH_TEMP}/gentoo.init.dir/mnt/cdrom }}} 1. "${PATH_TEMP}/gentoo.init.dir/init" 파일을 "${PATH_TEMP}/gentoo.init.dir/init.org"로 백업합니다. {{{#!plain cp ${PATH_TEMP}/gentoo.init.dir/init ${PATH_TEMP}/gentoo.init.dir/init.org }}} 1. "${PATH_TEMP}/gentoo.init.dir/init" 파일에서 다음부분을 찾아서 수정합니다. {{{#!plain -- if [ "${REAL_ROOT}" != "/dev/nfs" ] && [ "${LOOPTYPE}" != "sgimips" ] ++ if [ "${REAL_ROOT}" != "/dev/nfs" ] && [ "${LOOPTYPE}" != "sgimips" ] && [ "${REAL_ROOT}" != "/" ] -- elif [ -b "${REAL_ROOT}" ] || [ "${REAL_ROOT}" = "/dev/nfs" ] ++ elif [ -b "${REAL_ROOT}" ] || [ "${REAL_ROOT}" = "/dev/nfs" ] || [ "${REAL_ROOT}" = "/" ] -- cache_cd_contents -- mount -t squashfs -o loop,ro ${NEW_ROOT}/mnt/cdrom/${LOOPEXT}${LOOP} ${NEW_ROOT}/mnt/livecd ++ mount -t squashfs -o loop,ro /mnt/cdrom/${LOOPEXT}${LOOP} ${NEW_ROOT}/mnt/livecd }}} 1. "${PATH_TEMP}/gentoo.init.dir"을 다시 압축하고 "${PATH_TFTPROOT}/netboot/gentoo"로 복사합니다. {{{#!plain cd ${PATH_TEMP}/gentoo.init.dir find . -print | cpio -o -H newc |gzip -9 -c - > ${PATH_TFTPROOT}/netboot/gentoo/initrd.gz }}} 1. "${TFTPROOT}/netboot/pxelinux.cfg/default"으로 다음의 내용을 편집하여 만듭니다. {{{#!plain default gentoo_x86 prompt 1 timeout 600 label gentoo_x86 kernel gentoo/gentoo append initrd=gentoo/initrd.gz ip=dhcp root=/dev/ram0 init=/linuxrc loop=/image.squashfs looptype=squashfs cdroot=1 real_root=/ vga=normal dokeymap label local LOCALBOOT 0 }}} === 참고자료 === * [^https://wiki.ubuntu.com/UEFI/SecureBoot/PXE-IPv6 SecureBoot-compatible UEFI netboot over IPv4 and IPv6] * [^https://ubuntu.com/server/docs/install/netboot-amd64 Netbooting the server installer on amd64] * [^https://ubuntu.com/server/docs/install/netboot-arm64 Netbooting the Live Server Installer via UEFI PXE on Arm (aarch64, arm64) and x86_64 (amd64)] * [^https://www.golinuxcloud.com/pxe-boot-server-cloud-init-ubuntu-20-04/ Setup PXE Boot Server using cloud-init for Ubuntu 20.04 [Step-by-Step]]