메뉴 닫기

openstack 기본 이미지 제작

 

오픈 스택을 이용하여 가상 서버를 운영을 하거나 고객에게 서버를 할당할시에는 OS설치후
기본 이미지에 추가로 작업을 해야하는 부분이 있습니다.

예를 들어 가상 서버에 Customizing을 하기 위해서는 cloud-init 이라는 패키지가 설치 되어 있어야
하며 기본적으로 패키지 업데이트 및 확인 해야하는 부분도 상당히 많습니다.

하단에 CenOS 6버전과 Ubuntu 14.04 버전을 바탕으로 각각 이미지 제작시 테스트한 내용 입니다.

 

  1. CentOS 6 버전
  • cloud-init 설치

[root@host-192-168-1-71 ~]# yum install cloud-init
Loaded plugins: fastestmirror
Setting up Install Process
base                                                                                                                                                              | 3.7 kB     00:00     
base/primary_db                                                                                                                                                   | 4.7 MB     00:00     
extras                                                                                                                                                            | 3.4 kB     00:00     
extras/primary_db                                                                                                                                                 |  37 kB     00:00     
updates                                                                                                                                                           | 3.4 kB     00:00     
updates/primary_db                                                                                                                                                | 2.6 MB     00:00     
Resolving Dependencies
--> Running transaction check
---> Package cloud-init.x86_64 0:0.7.5-10.el6.centos.2 will be installed
--> Processing Dependency: python-requests for package: cloud-init-0.7.5-10.el6.centos.2.x86_64
--> Processing Dependency: python-prettytable for package: cloud-init-0.7.5-10.el6.centos.2.x86_64
--> Processing Dependency: python-oauth for package: cloud-init-0.7.5-10.el6.centos.2.x86_64
...
...
...
---> Package audit.x86_64 0:2.4.5-3.el6 will be an update
---> Package python-backports.x86_64 0:1.0-5.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

=========================================================================================================================================================================================
 Package                                                       Arch                             Version                                          Repository                         Size
=========================================================================================================================================================================================
Installing:
 cloud-init                                                    x86_64                           0.7.5-10.el6.centos.2                            extras                            432 k
Installing for dependencies:
 PyYAML                                                        x86_64                           3.10-3.1.el6                                     base                              157 k
 audit-libs-python                                             x86_64                           2.4.5-3.el6                                      base                               63 k
 dmidecode                                                     x86_64                           1:2.12-7.el6                                     base                               74 k
 libcgroup                                                     x86_64                           0.40.rc1-18.el6_8                                updates                           130 k
 libselinux-python                                             x86_64                           2.0.94-7.el6                                     base                              203 k
 libsemanage-python                                            x86_64                           2.0.43-5.1.el6                                   base                               81 k
 libyaml                                                       x86_64                           0.1.3-4.el6_6                                    base                               52 k
 policycoreutils-python                                        x86_64                           2.0.83-29.el6                                    base                              437 k
 python-argparse                                               noarch                           1.2.1-2.1.el6                                    base                               48 k
 python-backports                                              x86_64                           1.0-5.el6                                        base                              5.5 k
 python-backports-ssl_match_hostname                           noarch                           3.4.0.2-4.el6.centos                             extras                             13 k
 python-boto                                                   noarch                           2.32.1-1.el6.centos                              extras                            1.6 M
 python-chardet                                                noarch                           2.2.1-1.el6                                      base                              230 k
 python-cheetah                                                x86_64                           2.4.1-1.el6                                      base                              365 k
 python-configobj                                              noarch                           4.6.0-3.el6                                      base                              182 k
 python-jsonpatch                                              noarch                           1.2-2.el6.centos                                 extras                             14 k
 python-jsonpointer                                            noarch                           1.0-3.el6.centos                                 extras                            9.3 k
 python-markdown                                               noarch                           2.0.1-3.1.el6                                    base                              118 k
 python-oauth                                                  noarch                           1.0.1-1.el6.centos                               extras                             17 k
 python-prettytable                                            noarch                           0.7.2-1.el6.centos                               extras                             37 k
 python-pygments                                               noarch                           1.1.1-1.el6                                      base                              562 k
 python-requests                                               noarch                           2.6.0-3.el6                                      base                               95 k
 python-setuptools                                             noarch                           0.6.10-3.el6                                     base                              336 k
 python-six                                                    noarch                           1.9.0-2.el6                                      base                               28 k
 python-urllib3                                                noarch                           1.10.2-1.el6                                     base                              101 k
 setools-libs                                                  x86_64                           3.3.7-4.el6                                      base                              400 k
 setools-libs-python                                           x86_64                           3.3.7-4.el6                                      base                              222 k
Updating for dependencies:
 audit                                                         x86_64                           2.4.5-3.el6                                      base                              214 k
 audit-libs                                                    x86_64                           2.4.5-3.el6                                      base                               74 k
 libselinux                                                    x86_64                           2.0.94-7.el6                                     base                              109 k
 libselinux-utils                                              x86_64                           2.0.94-7.el6                                     base                               82 k
 policycoreutils                                               x86_64                           2.0.83-29.el6                                    base                              663 k

Transaction Summary
=========================================================================================================================================================================================
Install      28 Package(s)
Upgrade       5 Package(s)

Total download size: 7.1 M
Is this ok [y/N]: 

[root@host-192-168-1-71 ~]# ls /var/lib/cloud/
[root@host-192-168-1-71 ~]#
# 초기 cloud-init 설치시에는 /var/lib/cloud 디렉토리안에는 아무것도 출력이 안되며, 혹시 있다고 하면 삭제 해주자.

[root@host-192-168-1-71 ~]# vi /etc/cloud/cloud.cfg
...
...
...
ssh_pwauth:   true
# true로 value 변경

  • disk 용량 확인(25G)

[root@host-192-168-1-71 ~]# df -Th
Filesystem     Type   Size  Used Avail Use% Mounted on
/dev/vda1      ext4    25G  2.7G   21G  12% /
tmpfs          tmpfs  939M     0  939M   0% /dev/shm
[root@host-192-168-1-71 ~]# fdisk -l

Disk /dev/vda: 26.8 GB, 26843545600 bytes
255 heads, 63 sectors/track, 3263 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0004d6c5

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *           1        3264    26213376   83  Linux

  • 랜 디바이스 rule 파일 생성 안되게 설정

[root@host-192-168-1-71 ~]# vi /lib/udev/write_net_rules 
...
...
#RULES_FILE='/etc/udev/rules.d/70-persistent-net.rules' # 주석 처리
RULES_FILE='/dev/null' # 기존 네트웍 파일 생성되지 않게 수정

[root@host-192-168-1-71 ~]# rm /etc/udev/rules.d/70-persistent-net.rules 
rm: remove 일반 파일 `/etc/udev/rules.d/70-persistent-net.rules'? y

  • yum update

[root@host-192-168-1-71 ~]# yum update
Loaded plugins: fastestmirror
Setting up Update Process
Determining fastest mirrors
 * base: mirror.navercorp.com
 * extras: mirror.navercorp.com
 * updates: mirror.navercorp.com
Resolving Dependencies
--> Running transaction check
---> Package ConsoleKit.x86_64 0:0.4.1-3.el6 will be updated
---> Package ConsoleKit.x86_64 0:0.4.1-6.el6 will be an update
---> Package ConsoleKit-libs.x86_64 0:0.4.1-3.el6 will be updated
...
...
...
 yum                                                    noarch                            3.2.29-75.el6.centos                                  updates                            1.0 M
 yum-plugin-fastestmirror                               noarch                            1.1.30-37.el6                                         base                                32 k
 zip                                                    x86_64                            3.0-1.el6_7.1                                         base                               259 k
Installing for dependencies:
 compat-xcb-util                                        x86_64                            0.4.0-2.2.el6                                         base                                25 k

Transaction Summary
=========================================================================================================================================================================================
Install       3 Package(s)
Upgrade     188 Package(s)

Total download size: 346 M
Is this ok [y/N]: 

  • history 및 로그 초기화(virt-sysprep을 사용하여 설정)

root@jyh-con:~# virt-sysprep -a jyh
[   0.0] Examining the guest ...
[   6.2] Performing "abrt-data" ...
[   6.2] Performing "bash-history" ...
[   6.2] Performing "blkid-tab" ...
[   6.2] Performing "crash-data" ...
[   6.2] Performing "cron-spool" ...
[   6.2] Performing "dhcp-client-state" ...
[   6.2] Performing "dhcp-server-state" ...
[   6.2] Performing "dovecot-data" ...
[   6.2] Performing "logfiles" ...
[   6.2] Performing "machine-id" ...
[   6.3] Performing "mail-spool" ...
[   6.3] Performing "net-hostname" ...
[   6.3] Performing "net-hwaddr" ...
[   6.3] Performing "pacct-log" ...
[   6.3] Performing "package-manager-cache" ...
[   6.3] Performing "pam-data" ...
[   6.3] Performing "puppet-data-log" ...
[   6.3] Performing "rh-subscription-manager" ...
[   6.3] Performing "rhn-systemid" ...
[   6.3] Performing "rpm-db" ...
[   6.3] Performing "samba-db-log" ...
[   6.3] Performing "script" ...
[   6.3] Performing "smolt-uuid" ...
[   6.3] Performing "ssh-hostkeys" ...
[   6.3] Performing "ssh-userdir" ...
[   6.3] Performing "sssd-db-log" ...
[   6.3] Performing "tmp-files" ...
[   6.3] Performing "udev-persistent-net" ...
[   6.3] Performing "utmp" ...
[   6.3] Performing "yum-uuid" ...
[   6.3] Performing "customize" ...
[   6.3] Setting a random seed
[   6.3] Performing "lvm-uuids" ...
root@jyh-con:~# 
# glance로 업로드 하기전 이미지 초기화 작업

  • 기존 이미지의 cloud-init 내용 삭제

root@jyh-con:~# modprobe nbd

root@jyh-con:~# qemu-nbd -c /dev/nbd0 jyh

root@jyh-con:~# mount /dev/nbd0p1 /mnt

root@jyh-con:~# cd /mnt/var/lib/cloud/

root@jyh-con:/mnt/var/lib/cloud# ll 
total 36
drwxr-xr-x   8 root root 4096 Oct 11 15:18 ./
drwxr-xr-x. 21 root root 4096 Oct 11 15:25 ../
drwxr-xr-x   2 root root 4096 Oct 11 15:18 data/
drwxr-xr-x   2 root root 4096 Oct 11 15:16 handlers/
lrwxrwxrwx   1 root root   61 Oct 11 15:18 instance -> /var/lib/cloud/instances/547a2a04-09f1-4bea-a501-6ff447faf3b6
drwxr-xr-x   3 root root 4096 Oct 11 15:16 instances/
drwxr-xr-x   6 root root 4096 Oct 11 15:16 scripts/
drwxr-xr-x   2 root root 4096 Oct 11 15:16 seed/
drwxr-xr-x   2 root root 4096 Oct 11 15:16 sem/

root@jyh-con:/mnt/var/lib/cloud# rm -rf *
removed 'data/result.json'
removed 'data/previous-hostname'
removed 'data/previous-datasource'
removed 'data/instance-id'
removed 'data/previous-instance-id'
removed 'data/status.json'
...
...
...
root@jyh-con:/mnt/var/lib/cloud# cd /root/

root@jyh-con:/# umount /mnt 

root@jyh-con:/# qemu-nbd -d /dev/nbd0 
/dev/nbd0 disconnected

  • 초기 접속 패스워드 할당 및 클라이언트 최초 접속시 자동 패스워드 변경 요청하는 스크립트로 인스턴스 생성(nova user-data 사용)

root@jyh-con:~# cat change_pwd.sh 
#cloud-config
chpasswd:
  list: |
    root:cloudv_unga                # 계정:비번
  expire: False
runcmd:
  - cp /etc/shadow /etc/shadow_ori
  - "old=`grep root /etc/shadow | cut -d: -f3`"
  - sed -i "1s/$old/0/" /etc/shadow 
# /etc/shadow 파일 수정하여 처음 접속시 무조건 패스워드 변경하게 한다.

 

 

     2. Ubuntu 14.04 LTS 버전

  • 처음 설치시 생성한 계정 삭제

root@jyh1:~# vi /etc/ssh/sshd_config 
...
...
#PermitRootLogin without-password
PermitRootLogin yes
...
...
# PermitRootLogin 옵션 yes 변경.

root@jyh1:~# service ssh restart 
ssh stop/waiting
ssh start/running, process 1500

root@jyh1:~# userdel -r cloudv_unga
root@jyh1:~#
# 설치 계정 삭제.

  • cloud-init 설치

root@jyh1:~# apt-get install cloud-init
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  cloud-init
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/198 kB of archives.
After this operation, 1,023 kB of additional disk space will be used.
Preconfiguring packages ...
Selecting previously unselected package cloud-init.
(Reading database ... 86153 files and directories currently installed.)
Preparing to unpack .../cloud-init_0.7.5-0ubuntu1.18_all.deb ...
Unpacking cloud-init (0.7.5-0ubuntu1.18) ...
Processing triggers for ureadahead (0.100.0-16) ...
Setting up cloud-init (0.7.5-0ubuntu1.18) ...
Adding 'diversion of /etc/init/ureadahead.conf to /etc/init/ureadahead.conf.disabled by cloud-init'
Processing triggers for ureadahead (0.100.0-16) ...

root@jyh1:~# ls /var/lib/cloud/
root@jyh1:~# 
# 초기 cloud-init 설치시에는 /var/lib/cloud 디렉토리안에는 아무것도 출력이 안되며, 혹시 있다고 하면 삭제 해주자.

  • disk 용량 확인(25G)

root@jyh1:~# df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs  3.9G  8.0K  3.9G   1% /dev
tmpfs          tmpfs     799M  352K  799M   1% /run
/dev/vda1      ext4       25G  1.7G   22G   8% /
none           tmpfs     4.0K     0  4.0K   0% /sys/fs/cgroup
none           tmpfs     5.0M     0  5.0M   0% /run/lock
none           tmpfs     3.9G     0  3.9G   0% /run/shm
none           tmpfs     100M     0  100M   0% /run/user

root@jyh1:~# fdisk -l

Disk /dev/vda: 26.8 GB, 26843545600 bytes
25 heads, 8 sectors/track, 262144 cylinders, total 52428800 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000c67e1

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1            2048    52428799    26213376   83  Linux

  • 인스턴스 콘솔 display size 설정

root@jyh1:~# vi /etc/default/grub 
...
...
...
GRUB_CMDLINE_LINUX_DEFAULT="nomodeset vga=100"

root@jyh1:~# update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.13.0-93-generic
Found initrd image: /boot/initrd.img-3.13.0-93-generic
Found linux image: /boot/vmlinuz-3.13.0-24-generic
Found initrd image: /boot/initrd.img-3.13.0-24-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
done

  • 랜 디바이스 rule 파일 생성 안되게 설정

root@jyh1:~# vi /lib/udev/write_net_rules 
...
...
...
RULES_FILE='/dev/null'
#RULES_FILE='/etc/udev/rules.d/70-persistent-net.rules'
# 기존 RULE_FILE 주석처리하고 /dev/null로 설정

root@jyh1:~# rm /etc/udev/rules.d/70-persistent-net.rules

  • apt-get update

root@jyh1:~# apt-get update
Get:1 http://security.ubuntu.com trusty-security InRelease [65.9 kB]
Ign http://zone2.clouds.archive.ubuntu.com trusty InRelease                    
Get:2 http://security.ubuntu.com trusty-security/main Sources [120 kB]
Get:3 http://zone2.clouds.archive.ubuntu.com trusty-updates InRelease [65.9 kB]
Get:4 http://security.ubuntu.com trusty-security/universe Sources [43.7 kB]
Get:5 http://security.ubuntu.com trusty-security/main amd64 Packages [536 kB]  
Get:6 http://zone2.clouds.archive.ubuntu.com trusty-backports InRelease [65.9 kB]
Get:7 http://security.ubuntu.com trusty-security/universe amd64 Packages [138 kB]
...
...
Ign http://zone2.clouds.archive.ubuntu.com trusty/universe Translation-en_US   
Fetched 33.7 MB in 50s (660 kB/s)                                              
Reading package lists... Done

  • history 및 로그 초기화(virt-sysprep을 사용하여 설정)

root@jyh-con:~# virt-sysprep -a jyh
[   0.0] Examining the guest ...
[  18.9] Performing "abrt-data" ...
[  18.9] Performing "bash-history" ...
[  18.9] Performing "blkid-tab" ...
[  18.9] Performing "crash-data" ...
[  18.9] Performing "cron-spool" ...
[  18.9] Performing "dhcp-client-state" ...
[  18.9] Performing "dhcp-server-state" ...
[  18.9] Performing "dovecot-data" ...
[  18.9] Performing "logfiles" ...
[  19.0] Performing "machine-id" ...
[  19.0] Performing "mail-spool" ...
[  19.0] Performing "net-hostname" ...
[  19.0] Performing "net-hwaddr" ...
[  19.0] Performing "pacct-log" ...
[  19.0] Performing "package-manager-cache" ...
[  19.1] Performing "pam-data" ...
[  19.1] Performing "puppet-data-log" ...
[  19.1] Performing "rh-subscription-manager" ...
[  19.1] Performing "rhn-systemid" ...
[  19.1] Performing "rpm-db" ...
[  19.1] Performing "samba-db-log" ...
[  19.1] Performing "script" ...
[  19.1] Performing "smolt-uuid" ...
[  19.1] Performing "ssh-hostkeys" ...
[  19.1] Performing "ssh-userdir" ...
[  19.1] Performing "sssd-db-log" ...
[  19.1] Performing "tmp-files" ...
[  19.1] Performing "udev-persistent-net" ...
[  19.1] Performing "utmp" ...
[  19.1] Performing "yum-uuid" ...
[  19.1] Performing "customize" ...
[  19.1] Setting a random seed
[  19.2] Performing "lvm-uuids" ...
# glance로 업로드 하기전에 초기화

  • 기존 이미지의 cloud-init 내용 삭제

root@jyh-con:~# modprobe nbd

root@jyh-con:~# qemu-nbd -c /dev/nbd0 jyh

root@jyh-con:~# mount /dev/nbd0p1 /mnt

root@jyh-con:~# cd /mnt/var/lib/cloud/

root@jyh-con:/mnt/var/lib/cloud# ls
data  handlers  instance  instances  scripts  seed  sem
root@jyh-con:/mnt/var/lib/cloud# rm -rf *
removed 'data/status.json'
removed 'data/previous-hostname'
removed 'data/previous-instance-id'
removed 'data/previous-datasource'
removed 'data/instance-id'
removed 'data/result.json'
removed directory 'data'
...
...
...
# 기존에 자료가 남아있으면 삭제한다.

root@jyh-con:/mnt# cd /root/

root@jyh-con:~# umount /mnt 

root@jyh-con:~# qemu-nbd -d /dev/nbd0
/dev/nbd0 disconnected

root@jyh-con:~# rmmod nbd

  • 초기 접속 패스워드 할당 및 클라이언트 최초 접속시 패스워드 자동 변경 요청하는 스크립트로 인스턴스 생성(nova user-data 사용)

root@jyh-con:~# cat change_pwd.sh 
#cloud-config
chpasswd:
  list: |
    root:bulgom_unga                # 계정:비번
  expire: False
runcmd:
  - cp /etc/shadow /etc/shadow_ori
  - "old=`grep root /etc/shadow | cut -d: -f3`"
  - sed -i "1s/$old/0/" /etc/shadow 
# /etc/shadow 파일 수정하여 처음 접속시 무조건 패스워드 변경하게 한다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다