pkvlm-create
changeset 14 4154c64c5d69
parent 13 46fdb138420e
child 15 e3893b949972
equal deleted inserted replaced
13:46fdb138420e 14:4154c64c5d69
    32 
    32 
    33     -T      Just testing..
    33     -T      Just testing..
    34 
    34 
    35 Parameters are given as:
    35 Parameters are given as:
    36 
    36 
    37     NAME=value-{FOO}
    37     name=value-{FOO}
    38 
    38 
    39 END
    39 END
    40 }
    40 }
    41 
    41 
    42 while getopts "hDvqNPTI" opt; do
    42 while getopts "hDvqNPTI" opt; do
   136 define_opt  guest_disk  /dev/vda
   136 define_opt  guest_disk  /dev/vda
   137 define_opt  hostname    $opt_name
   137 define_opt  hostname    $opt_name
   138 define_opt  bridge      br-lan
   138 define_opt  bridge      br-lan
   139 define_opt  dns_domain  paivola.fi
   139 define_opt  dns_domain  paivola.fi
   140 define_opt  ip          
   140 define_opt  ip          
       
   141 define_opt  puppet      
   141 
   142 
   142 log_info "Processing ${#@} parameters:"
   143 log_info "Processing ${#@} parameters:"
   143 for param in "$@"; do
   144 for param in "$@"; do
   144     name=${param%=*}
   145     name=${param%=*}
   145     value=${param##*=}
   146     value=${param##*=}
   153 # resolve defaults
   154 # resolve defaults
   154 if [ -z $opt_ip ]; then
   155 if [ -z $opt_ip ]; then
   155     define_opt  ip          $(resolve_name ${opt_name}.${opt_dns_domain})
   156     define_opt  ip          $(resolve_name ${opt_name}.${opt_dns_domain})
   156 fi
   157 fi
   157 
   158 
   158 
   159 ### Virtual machine config
   159 
   160 ## libvirt guest info
   160 ### Preseed content
   161 # Name
   161 ## Guest info
       
   162 GUEST_NAME=$opt_name
   162 GUEST_NAME=$opt_name
   163 
   163 
   164 # Basic params
   164 # Basic params
   165 GUEST_RAM=$opt_ram
   165 GUEST_RAM=$opt_ram
   166 GUEST_VCPUS=$opt_cpus
   166 GUEST_VCPUS=$opt_cpus
   178 # LVM lv to use
   178 # LVM lv to use
   179 DISK_NAME=$opt_disk_lv
   179 DISK_NAME=$opt_disk_lv
   180 
   180 
   181 # Path to disk block device
   181 # Path to disk block device
   182 DISK_PATH=/dev/mapper/${DISK_VG}-${DISK_NAME}
   182 DISK_PATH=/dev/mapper/${DISK_VG}-${DISK_NAME}
   183 DISK_BUS=$opt_disk_bus
   183 GUEST_DISK_BUS=$opt_disk_bus
       
   184 
       
   185 ### Preseed content
   184 GUEST_DISK=$opt_guest_disk
   186 GUEST_DISK=$opt_guest_disk
   185 
   187 
   186 ## Network
   188 ## Network
   187 # Network configuration, for /etc/network/interfaces
   189 # Network configuration, for /etc/network/interfaces
   188 NET_DOMAIN=paivola.fi
   190 NET_DOMAIN=paivola.fi
   219 
   221 
   220     if [ $UID -eq 0 ]; then
   222     if [ $UID -eq 0 ]; then
   221         log_debug "Get user password from shadow: $user"
   223         log_debug "Get user password from shadow: $user"
   222         getent_user_attr $user shadow 2
   224         getent_user_attr $user shadow 2
   223     else
   225     else
   224         echo -n "Install target login ($user) " >&2
   226         echo -n "Install target login ($USER_NAME) " >&2
   225         mkpasswd -m sha-512
   227         mkpasswd -m sha-512
   226     fi
   228     fi
   227 }
   229 }
   228 
   230 
   229 # XXX: hardcoded
   231 # XXX: hardcoded
   230 USER_CREATE='true'
   232 USER_CREATE='true'
   231 USER_NAME=$USER
   233 USER_NAME=$USER
   232 USER_FULLNAME=$(user_fullname $USER_NAME)
   234 USER_FULLNAME=$(user_fullname $USER)
   233 USER_SHADOW=$(user_shadow $USER_NAME)
   235 USER_SHADOW=$(user_shadow $USER)
   234 USER_GROUPS=(cdrom sudo adm)
   236 USER_GROUPS=( cdrom sudo adm )
   235 
   237 
   236 
   238 ## Misc
       
   239 PACKAGE_INCLUDES=( sudo screen vim )
       
   240 PRESEED_LATE_COMMANDS=( )
       
   241 PRESEED_INCLUDES=( 'passwords.cfg' 'host.cfg' )
       
   242 
       
   243 if [ $opt_puppet ]; then
       
   244     log_info "Puppetizing preseed"
       
   245 
       
   246     PUPPET_PACKAGES=( puppet )
       
   247     PUPPET_COMMANDS=( \
       
   248         "in-target sed -i 's/START=no/START=yes/' /etc/default/puppet"  \
       
   249     )
       
   250 
       
   251     PACKAGE_INCLUDES=( ${PACKAGE_INCLUDES[@]} ${PUPPET_PACKAGES[@]} )
       
   252     PRESEED_LATE_COMMANDS=( ${PRESEED_LATE_COMMANDS[@]:-} ${PUPPET_COMMANDS[@]} )
       
   253 fi
       
   254 
       
   255 # full commands
       
   256 PRESEED_LATE_COMMAND=$(IFS=$'; \\\n\t' echo "${PRESEED_LATE_COMMANDS[@]}")
   237 
   257 
   238 ### Installer setup
   258 ### Installer setup
   239 ## Installation image
   259 ## Installation image
   240 # Original Debian Installer image (iso)
   260 # Original Debian Installer image (iso)
   241 INSTALLER_NAME="debian-6.0.3-amd64"
   261 INSTALLER_NAME="debian-6.0.3-amd64"
   248 
   268 
   249 # Customized image content
   269 # Customized image content
   250 INSTALL_TREE="images/${INSTALL_NAME}"
   270 INSTALL_TREE="images/${INSTALL_NAME}"
   251 INSTALL_ISO="iso-out/${INSTALL_NAME}.iso"
   271 INSTALL_ISO="iso-out/${INSTALL_NAME}.iso"
   252 
   272 
       
   273 
   253 ## Preseed files
   274 ## Preseed files
   254 # Preseed output file in install tree
   275 # Preseed output file in install tree
   255 PRESEED_NAME="preseed.cfg"
   276 PRESEED_NAME="preseed.cfg"
   256 
   277 
   257 # Preseed source template
   278 # Directory containing our source templates
   258 PRESEED_TEMPLATE="preseed/${PRESEED_NAME}"
   279 PRESEED_SOURCE_DIR="preseed"
       
   280 
       
   281 # Prefix for target files in install tree
       
   282 # XXX: not implemented
       
   283 #PRESEED_TARGET_PREFIX=""
       
   284 
       
   285 # Main preseed source template
       
   286 PRESEED_TEMPLATE="${PRESEED_SOURCE_DIR}/${PRESEED_NAME}"
       
   287 
       
   288 # Target path for preseed in install tree
   259 PRESEED_FILE="${INSTALL_TREE}/${PRESEED_NAME}"
   289 PRESEED_FILE="${INSTALL_TREE}/${PRESEED_NAME}"
   260 PRESEED_ISOLINUX="preseed/isolinux.cfg"
   290 
   261 PRESEED_INCLUDES=("preseed/passwords.cfg" "preseed/host.cfg")
   291 # Checksum of target preseed.cfg
   262 PRESEED_CHECKSUM= # set later
   292 PRESEED_CHECKSUM= # set later
   263 
   293 
       
   294 # Additional files to copy
       
   295 PRESEED_INCLUDE_FILES=( $(for preseed in ${PRESEED_INCLUDES[@]}; do echo "${PRESEED_SOURCE_DIR}/${preseed}"; done) )
       
   296 #PRESEED_INCLUDE_FILES=("preseed/passwords.cfg" "preseed/host.cfg")
       
   297 
       
   298 # preseed.cfg 'includes' line
       
   299 PRESEED_INCLUDE=${PRESEED_INCLUDES[@]}
       
   300 
       
   301 
       
   302 ## Isolinux
       
   303 # Source for install tree isolinux file
       
   304 PRESEED_ISOLINUX="${PRESEED_SOURCE_DIR}/isolinux.cfg"
       
   305 
       
   306 # XXX: automagics? :)
       
   307 #      virt-install assumes we have an X $DISPLAY if given --vnc
       
   308 #      but we also want to enable the serial console...
       
   309 #      d-i automagically configures the serial boot/login console, but only if the installer is run under serial...
       
   310 #      we want to have both :(
       
   311 if [ $DISPLAY ]; then
       
   312     INSTALL_BOOT_CONSOLE=""
       
   313 else
       
   314     INSTALL_BOOT_CONSOLE="console=ttyS0"
       
   315 fi
       
   316 
   264 # installer boot args
   317 # installer boot args
   265 INSTALL_BOOT_ARGS="auto=true priority=critical preseed/file=/cdrom/${PRESEED_NAME} preseed/file/checksum=${PRESEED_CHECKSUM} -- quiet console=ttyS0"
   318 INSTALL_BOOT_ARGS="auto=true priority=critical preseed/file=/cdrom/${PRESEED_NAME} preseed/file/checksum=${PRESEED_CHECKSUM} -- quiet ${INSTALL_BOOT_CONSOLE}"
   266 
   319 
   267 
   320 
   268 
   321 
   269 ### External progs
   322 ### External progs
   270 ## Bootable .iso for Debian isolinux-based installer CDs
   323 ## Bootable .iso for Debian isolinux-based installer CDs
   312     LVM:
   365     LVM:
   313         VG:     $DISK_VG
   366         VG:     $DISK_VG
   314         LV:     $DISK_NAME
   367         LV:     $DISK_NAME
   315 
   368 
   316     Path:       $DISK_PATH
   369     Path:       $DISK_PATH
   317     Bus:        $DISK_BUS
   370     Bus:        $GUEST_DISK_BUS
   318 
   371 
   319 Net:
   372 Net:
   320     Hostname:   $NET_HOSTNAME
   373     Hostname:   $NET_HOSTNAME
   321     Method:     Bridge
   374     Method:     Bridge
   322     IP:         $NET_IPADDR
   375     IP:         $NET_IPADDR
   386 
   439 
   387 # Isolinux .cfg
   440 # Isolinux .cfg
   388 cmd expand_template ${PRESEED_ISOLINUX} ${INSTALL_TREE}/isolinux/isolinux.cfg
   441 cmd expand_template ${PRESEED_ISOLINUX} ${INSTALL_TREE}/isolinux/isolinux.cfg
   389 
   442 
   390 # Others
   443 # Others
   391 for file in ${PRESEED_INCLUDES[@]}; do
   444 for file in ${PRESEED_INCLUDE_FILES[@]}; do
   392     name=$(basename $file)
   445     name=$(basename $file)
   393 
   446 
   394     cmd expand_template $file ${INSTALL_TREE}/${name}
   447     cmd expand_template $file ${INSTALL_TREE}/${name}
   395 done
   448 done
   396 
   449 
   425             --connect $LIBVIRT \
   478             --connect $LIBVIRT \
   426             --name $GUEST_NAME \
   479             --name $GUEST_NAME \
   427             --ram $(expand_MB $GUEST_RAM) --vcpus $GUEST_VCPUS \
   480             --ram $(expand_MB $GUEST_RAM) --vcpus $GUEST_VCPUS \
   428             --cdrom "$INSTALL_ISO" \
   481             --cdrom "$INSTALL_ISO" \
   429             --os-variant $GUEST_OS_VARIANT \
   482             --os-variant $GUEST_OS_VARIANT \
   430             --disk path=$DISK_PATH,bus=$DISK_BUS \
   483             --disk path=$DISK_PATH,bus=$GUEST_DISK_BUS \
   431             --network bridge:$NET_BRIDGE \
   484             --network bridge:$NET_BRIDGE \
   432             --vnc \
   485             --vnc \
   433             --virt-type $LIBVIRT_TYPE \
   486             --virt-type $LIBVIRT_TYPE \
   434             --accelerate --hvm \
   487             --accelerate --hvm \
   435             --serial pty
   488             --serial pty