Ubuntu Install Automation

연구실 서버를 세팅하며 수십대의 컴퓨터에 Ubuntu를 재설치했다. 조금 더 편리하게 설치하고자, 자동화된 설치 기법을 찾아보았다. 크게 두 가지 방식으로 자동 설치가 가능한 것으로 보인다. Presseding과 kickstart를 사용해 설치를 자동화할 수 있다.

1. Preseeding – 부트 옵션에 주는 방식
첫 번째로 preseeding을 사용해 자동화된 설치를 시도했으나, 잘 되지 않았다. Preseeding을 사용해 설치를 자동화하려면, boot 옵션에 preseed url을 주면 된다. (아마 네트워크 문제로 잘 되지 않았을 것으로 추정)

boot: install auto=true priority=critical preseed/url=http://XXX/XXX.cfg

2. Kickstart – Custom ISO 이미지 생성
Kickstart를 사용한 방식이 개인적으로 더 직관적이고 쉬웠다. Kickstart를 사용하면 GUI로 설치 과정을 미리 모두 선택한 다음, 일괄 적용할 수 있다. (아래의 내용은 전적으로 [1]을 참고함.)

Kickstart를 설치하고, 실행한다.

$sudo apt-get install system-config-kickstart
$system-config-kickstart

일부 Ubuntu 버전에서 kickstart가 제대로 실행되지 않는다. [2]를 참고해 해결할 수 있었다.

$sudo apt-get remove hwdata
$wget ftp://mirror.ovh.net/mirrors/ftp.debian.org/debian/pool/main/h/hwdata/hwdata_0.234-1_all.deb
$sudo dpkg -i  hwdata_0.234-1_all.deb

Kickstart를 실행하고, 설치 옵션을 지정한 다음 이를 저장한다.

$system-config-kickstart

사용한 kickstart file은 다음과 같다.
(이를 그대로 사용하고 싶은 경우, 파티션과 root 비밀번호 변경 필요)

#Generated by Kickstart Configurator
#platform=AMD64 or Intel EM64T

#System language
lang en_US
#Language modules to install
langsupport en_US
#System keyboard
keyboard kr_kr104
#System mouse
mouse
#System timezone
timezone Asia/Seoul
#Root password
rootpw --iscrypted XXXX
#Initial user
user --disabled
#Reboot after installation
reboot
#Use text mode install
text
#Install OS instead of upgrade
install
#Use CDROM installation media
cdrom
#System bootloader configuration
bootloader --location=mbr 
#Clear the Master Boot Record
zerombr yes
#Partition clearing information
clearpart --all --initlabel
#Disk partitioning information
part / --fstype ext4 --size 1 --grow
part swap --size 24576
#part swap --size 23552 #ursus
#part swap --size 37888 #cacloud
#System authorization infomation
auth  --useshadow  --enablemd5
#Firewall configuration
firewall --disabled
#Do not configure the X Window System
skipx

%post --interpreter=/bin/bash
rm /etc/hosts
(
cat << 'EOP'
#host file content
EOP
) > /etc/hosts
ssh-keygen -b 2048 -t rsa -f /root/.ssh/id_rsa -q -N ""

이렇게 생성된 파일을 iso 파일에 적용해주기만 하면 된다.
iso 파일을 다운로드하고, 수정하기 위해 임시 디렉토리에 복사한다.

$wget http://ftp.kaist.ac.kr/ubuntu-cdimage/ubuntu-server/trusty/daily/current/trusty-server-amd64.iso
$mkdir original-iso custom-iso
$sudo mount -o loop trusty-server-amd64.iso ./original-iso
$sudo cp -ad original-iso/* original-iso/.disk custom-iso
$sudo umount ./original-iso

txt.cfg를 수정해 설치 메뉴를 추가한다.

$sudo vi custom-iso/isolinux/txt.cfg

“Install CALAB Ubuntu Server” 항목을 추가했다.

default custom 
label custom
  menu label ^Install CALAB Ubuntu Server
  kernel /install/vmlinuz
  append  initrd=/install/initrd.gz quiet ks=cdrom:/isolinux/ks.cfg asknetwork --
label install
  menu label ^Install Ubuntu Server
  kernel /install/vmlinuz
  append  file=/cdrom/preseed/ubuntu-server.seed vga=788 initrd=/install/initrd.gz quiet --
label cloud
  menu label ^Multiple server install with MAAS
  kernel /install/vmlinuz
  append   modules=maas-enlist-udeb vga=788 initrd=/install/initrd.gz quiet --
label check
  menu label ^Check disc for defects
  kernel /install/vmlinuz
  append   MENU=/bin/cdrom-checker-menu vga=788 initrd=/install/initrd.gz quiet --
label memtest
  menu label Test ^memory
  kernel /install/mt86plus
label hd
  menu label ^Boot from first hard disk
  localboot 0x80

앞서 생성한 ks.cfg를 ./custom-iso/isolinux/ 아래로 이동한다.

마지막으로 이미지를 생성한다.

$sudo apt-get install genisoimage
$sudo mkisofs -joliet-long -J -l -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -z -iso-level 4 -c isolinux/isolinux.cat -o ./trusty-server-amd64-custom.iso custom-iso/

References:
[1] [우분투] 12.04 커스텀 ISO 서버 이미지 만들어 보기, 지훈현서, http://mcchae.egloos.com/11145086
[2] [SOLVED] system-config-kickstart not working in Ubuntu 14.04, http://www.linuxquestions.org/questions/ubuntu-63/system-config-kickstart-not-working-in-ubuntu-14-04-a-4175502357/
[3] Ubuntu 12.04 kickstart script, github gist, https://gist.github.com/ludo/3652811
[4] kickstart, behavioral changes, redhat, https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Migration_Planning_Guide/sect-Migration_Guide-Installation-Graphical_Installer-Kickstart.html
[5] Starting a Kickstart Installation, redhat, https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/s1-kickstart2-startinginstall.html

Advertisements
Tagged with: , ,
Posted in 2) Computer Engineering

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

누적 방문자 수
  • 98,564 hits
%d bloggers like this: