Hello World

File build-vm-pvm of Package build

#PowerVM build functions

pvm_setup_bootloader(){
   disk=$1
   parted -s $disk mklabel msdos
   parted -s $disk mkpart primary ext2 0 $bootloader_size
   parted -s $disk set 1 boot on
   parted -s $disk set 1 prep on
   parted -s $disk mkpart primary ext3 8M 100%
   bl_target=${disk}1
}

pvm_getdiskname(){
     lv=$1
     if [ -z "$SKIP" ];then
         args=$(pvmctl scsi list -f ' ' -d VirtualDisk.udid ClientAdapter.loc_code --where VirtualDisk.name=$lv)
         eval $args
         host=$(ls-vscsi | grep $loc_code| awk -F " " '{print $1}')
         udid=$(echo $udid | cut -c 3-)
         devid="/dev/disk/by-id/scsi-SAIX_VDASD_$udid"
         until test -L $devid;do
             sleep 1;
             echo "- - -" >  /sys/class/scsi_host/$host/scan
         done
         dev=$(readlink -f $devid)
     fi
     case $lv in
         *root) test -z "$SKIP" && pvm_setup_bootloader "$dev"
                VM_ROOT="${dev}2";;
         *swap) VM_SWAP="${dev}";;
     esac
}

pvm_execute(){
    cmd=$@
    pvmctl $cmd
}

pvm_is_created() {
    dev=$1
    $(pvmctl lv list -d LogicalVolume.name | grep -q $dev) && SKIP=1
}

pvm_createdev() {
     name=$1
     size=$2
     target=$3
     size_gb=`expr $size / 1024`
     test -z $3 && target=$master_lpar
     pvm_is_created $name
     if [ -z "$SKIP" ];then
         pvm_execute lv create --name $name --size $size_gb
         target=$master_lpar
     fi
     pvm_execute scsi create --vg name=rootvg --type lv --lpar name=$target --stor-id $name
     test -z "$SKIP" && pvm_getdiskname $name
}

pvm_lpar_is_running(){
    state=$(pvmctl lpar list -d LogicalPartition.state --where LogicalPartition.name=$lpname |awk -F "=" '{print $2}')
    CONSOLEPID=`pgrep -f "cat $hvcdev"`
    if [ "$state" = "running" ];then
       return 0
    else
       test -n $CONSOLEPID && kill -TERM $CONSOLEPID
       return 1
    fi
}

pvm_watch_build(){
    while pvm_lpar_is_running $lpname;do
        sleep 10
    done
}

pvm_detachdev(){
    lv=$1
    lpar=$2
    pvm_execute scsi delete --lpar name=$lpar --type lv --stor-id $lv
}

pvm_deletelv(){
    viosvrcmd --id 1 -c "rmbdsp -bd $1"
}

pvm_nametoid(){
    local id
    name=$1
    lparid=$(pvmctl lpar list -d LogicalPartition.id -i name=$name | awk -F "=" '{print $2}')
}


pvm_openconsole(){
    id=$1
    pvmutil -o create_vterm_dev --id $id
    hvcsadmin -console $id
    hvcdev=$(hvcsadmin -console $id|awk '{print $4}')
}

pvm_closeconsole(){
    hvcdev=$(hvcsadmin -console $id|awk '{print $4}')
    hvcsadmin -close $hvcdev
    pvmutil -o delete_vterm_dev --id $1
}

vm_kill_pvm() {
   pvm_execute lpar power-off --hard -i name="$VM_NAME"
}

vm_startup_pvm(){
    cpus=$BUILD_JOBS
    cores=`echo 0.05 \* $cpus| bc -l`
    pvm_execute lpar create --name $lpname --mem $VM_MEMSIZE --proc-unit $cores --proc $cpus --proc-type shared --sharing-mode uncapped --type $lpartype
    pvm_nametoid $lpname
    vm_attach_root_pvm $lpname
    vm_attach_swap_pvm $lpname
    pvm_openconsole $lparid
    pvm_execute lpar power-on -i name=$lpname
    pvm_watch_build &
    PID=$!
    cat $hvcdev
    vm_detach_root_pvm $lpname
    vm_detach_swap_pvm $lpname
}

vm_verify_options_pvm(){
    test -z "$VM_WORKER_NO" && VM_WORKER_NO=1
    lpname="worker-$VM_WORKER_NO"
    lpartype="AIX/Linux"
    bootloader_size="8M"
    rootlv="$lpname"-root
    swaplv="$lpname"-swap
    master_lpar=$(cat /proc/device-tree/ibm,partition-name)
}

vm_attach_root_pvm(){
    target=$1
    pvm_createdev $rootlv $VMDISK_ROOTSIZE $target
}

vm_attach_swap_pvm(){
    pvm_createdev $swaplv $VMDISK_SWAPSIZE $target
}

vm_detach_swap_pvm(){
    lpar=$1
    test -z $lpar && lpar=$master_lpar
    pvm_detachdev $swaplv $lpar
}

vm_detach_root_pvm(){
    lpar=$1
    test -z $lpar && lpar=$master_lpar
    pvm_detachdev $rootlv $lpar
}

vm_cleanup_pvm(){
    pvm_nametoid $lpname
    pvm_closeconsole $lparid
    vm_detach_root_pvm $lpname
    vm_detach_root_pvm
    vm_detach_swap_pvm $lpname
    vm_detach_swap_pvm
    pvm_execute lpar delete -i name=$lpname
    pvm_deletelv $rootlv
    pvm_deletelv $swaplv
}

vm_sysrq_pvm(){
    :
}

vm_wipe_pvm(){
    :
}

vm_fixup_pvm(){
    VM_SWAPDEV=/dev/sdb
    GRUBDIR=`mktemp -d /tmp/grubinstall.XXXX`
    modules="ext2 part_msdos linux disk elf"
    grubcfg="$GRUBDIR/grub.cfg"
    grubimg="$GRUBDIR/grub.img"
    cat <<'EOF' >> $GRUBDIR/grub.cfg
insmod ext2
insmod part_msdos
insmod linux
insmod disk
insmod elf
set root='ieee1275//vdevice/v-scsi@30000002/disk@8100000000000000,msdos2'
linux /.build.kernel.kvm init=/.build/build console=hvc0 root=/dev/sda2 rw elevator=noop $vm_linux_kernel_parameter
initrd /.build.initrd.kvm
boot
EOF
    grub2-mkimage -O powerpc-ieee1275 -o $grubimg -c $grubcfg $modules
    dd if=$grubimg of=$bl_target
    rm -rf $GRUBDIR
}