Configurare Buildbot per le macchine virtuali - Fedora 16
Contents
Installazione base
qemu-img create -f qcow2 /kvm/vms/vm-fedora16-i386-serial.qcow2 10G qemu-img create -f qcow2 /kvm/vms/vm-fedora16-amd64-serial.qcow2 10G
Avviare ogni VM dalla iso di installazione del server, una per volta, e seguire queste istruzioni:
kvm -m 1024 -hda /kvm/vms/vm-fedora16-i386-serial.qcow2 -cdrom /kvm/iso/fedora/Fedora-16-i386-DVD.iso -redir tcp:2263::22 -boot d -smp 2 -cpu qemu32,-nx -net nic,model=virtio -net user kvm -m 1024 -hda /kvm/vms/vm-fedora16-amd64-serial.qcow2 -cdrom /kvm/iso/fedora/Fedora-16-x86_64-DVD.iso -redir tcp:2264::22 -boot d -smp 2 -cpu qemu64 -net nic,model=virtio -net user
Quando è in esecuzione, connettersi al server VNC dall'host locale:
vncviewer -via ${remote-host} localhost
Sostituire ${remote-host} con l'host su cui la vm viene eseguita.
Nota: Quando si attiva l'installazione, vncviewer potrebbe disconnettersi dicendo che il rect è troppo grande. Va tutto bene. L'installer di Fedora ha semplicemente ridimensionato lo schermo vnc. Basta riconnettersi.
Installare e mantenere la maggior parte delle opzioni predefinite, ma con qualche accorgimento:
- L'Installer lancia un "Storage Device Warning", scegliere "Yes, discard any data"
- Impostare l'hostname a fedora16-amd64 (o fedora16-i386)
- Cliccare il bottone "Configure Network" nella schermata Hostname.
- Cambiare System eth0 in "connect automatically"
- Applicare i cambiamenti e chiudere la finestra "Network Connections"
- Quando si partizionano i dischi, scegliere "Use All Space"
- Deselezionare la casella "Use LVM"
- Non selezionare la casella "Encrypt system"
- Installazione minima
- Customize Later
Al termine dell'installazione, viene chiesto di riavviare. Bisogna farlo, ma fallirà. Terminare la VM (dopo che il reboot fallisce) e riavviarla:
kvm -m 1024 -hda /kvm/vms/vm-fedora16-i386-serial.qcow2 -redir tcp:2263::22 -boot c -smp 2 -cpu qemu32,-nx -net nic,model=virtio -net user kvm -m 1024 -hda /kvm/vms/vm-fedora16-amd64-serial.qcow2 -redir tcp:2264::22 -boot c -smp 2 -cpu qemu64 -net nic,model=virtio -net user
Finché l'utente extra non è installato occorre connettersi via VNC come prima. SSH è preferibile, perciò è la prima cosa che faremo. Entrare come root.
ssh -p 2263 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i ~/.ssh/buildbot.id_dsa root@localhost ssh -p 2264 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i ~/.ssh/buildbot.id_dsa root@localhost
Dopo essere entrati come root, installare ssh e creare l'utente locale:
/sbin/chkconfig --level 35 network on ifup eth0 yum install openssh-server openssh-clients adduser ${username} usermod -a -G wheel ${username} passwd ${username}
Abilitare il sudo senza password e la console seriale:
visudo # Uncomment the line "%wheel ALL=(ALL) NOPASSWD: ALL" # Comment out this line: # Defaults requiretty
Ancora loggati come root, aggiungere a /boot/grub/menu.lst:
Modificare /boot/grub/menu.lst:
sudo vi /etc/default/grub # Aggiungere/modificare queste voci: GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8" GRUB_TERMINAL="serial" GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1" grub2-mkconfig -o /boot/grub2/grub.cfg
Uscire da root, e poi, dall'host server della VM:
Creare una directory .ssh:
ssh -t -p 2263 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i ~/.ssh/buildbot.id_dsa localhost "mkdir -v .ssh" ssh -t -p 2264 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i ~/.ssh/buildbot.id_dsa localhost "mkdir -v .ssh"
Copiare nel file delle chiavi autorizzare:
scp -P 2263 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no /kvm/vms/authorized_keys localhost:.ssh/ scp -P 2264 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no /kvm/vms/authorized_keys localhost:.ssh/
Impostare i permessi sulla directory .ssh:
ssh -t -p 2263 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i ~/.ssh/buildbot.id_dsa localhost "chmod -R go-rwx .ssh" ssh -t -p 2264 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i ~/.ssh/buildbot.id_dsa localhost "chmod -R go-rwx .ssh"
Creare l'utente buildbot:
ssh -p 2263 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no localhost 'chmod -R go-rwx .ssh; sudo adduser buildbot; sudo usermod -a -G wheel buildbot; sudo mkdir ~buildbot/.ssh; sudo cp -vi .ssh/authorized_keys ~buildbot/.ssh/; sudo chown -vR buildbot:buildbot ~buildbot/.ssh; sudo chmod -vR go-rwx ~buildbot/.ssh' ssh -p 2264 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no localhost 'chmod -R go-rwx .ssh; sudo adduser buildbot; sudo usermod -a -G wheel buildbot; sudo mkdir ~buildbot/.ssh; sudo cp -vi .ssh/authorized_keys ~buildbot/.ssh/; sudo chown -vR buildbot:buildbot ~buildbot/.ssh; sudo chmod -vR go-rwx ~buildbot/.ssh'
Fare un su all'utente buildbot locale e connettersi con ssh alla vm per inserire la chiave in known_hosts:
Per i386:
sudo su - buildbot ssh -p 2263 buildbot@localhost # exit, then exit again
Per amd64:
sudo su - buildbot ssh -p 2264 buildbot@localhost # exit, then exit again
Caricare il file ttyS0 e metterlo al suo posto:
scp -P 2263 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no /kvm/vms/ttyS0 buildbot@localhost: scp -P 2264 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no /kvm/vms/ttyS0 buildbot@localhost: ssh -p 2263 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no buildbot@localhost 'sudo mv -vi ttyS0 /etc/event.d/;' ssh -p 2264 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no buildbot@localhost 'sudo mv -vi ttyS0 /etc/event.d/;'
Aggiornare la VM:
ssh -p 2263 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no buildbot@localhost ssh -p 2264 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no buildbot@localhost
Una volta entrati:
sudo yum update
Dopo l'aggiornamento, arrestare la VM:
sudo shutdown -h now
Le VM per creare i file .rpm
for i in '/kvm/vms/vm-fedora16-amd64-serial.qcow2 2264 qemu64' '/kvm/vms/vm-fedora16-i386-serial.qcow2 2263 qemu64' ; do \ set $i; \ runvm --user=buildbot --logfile=kernel_$2.log --base-image=$1 --port=$2 --cpu=$3 "$(echo $1 | sed -e 's/serial/build/')" \ "sudo yum -y groupinstall 'Development Tools'" \ "sudo yum -y install wget tree gperf readline-devel ncurses-devel zlib-devel pam-devel libaio-devel openssl-devel perl perl\(DBI\)" \ "sudo yum -y remove systemtap-sdt-dev" \ "sudo mkdir -vp /usr/src/redhat/SOURCES /usr/src/redhat/SPECS /usr/src/redhat/RPMS /usr/src/redhat/SRPMS" \ "wget http://www.cmake.org/files/v2.8/cmake-2.8.8.tar.gz;tar -zxvf cmake-2.8.8.tar.gz;cd cmake-2.8.8;./configure;make;sudo make install"; \ done
Vedi anche:
Le VM per il testing dell'installazione.
MariaDB.local.repo
punta alla directory locale sulla VM. MariaDB.repo
punta al vero repository YUM di MariaDB.
for i in '/kvm/vms/vm-fedora16-amd64-serial.qcow2 2264 qemu64' '/kvm/vms/vm-fedora16-i386-serial.qcow2 2263 qemu64' ; do \ set $i; \ runvm --user=buildbot --logfile=kernel_$2.log --base-image=$1 --port=$2 --cpu=$3 "$(echo $1 | sed -e 's/serial/install/')" \ "sudo yum -y update" \ "sudo yum -y install libaio perl perl-Time-HiRes perl-DBI" \ "= scp -P $2 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no /kvm/vms/MariaDB.local.repo buildbot@localhost:/tmp/" \ "sudo mv -vi /tmp/MariaDB.local.repo /etc/yum.repos.d/"; \ done
Le VM per il testing dell'aggiornamento di MySQL
for i in '/kvm/vms/vm-fedora16-amd64-serial.qcow2 2264 qemu64' '/kvm/vms/vm-fedora16-i386-serial.qcow2 2263 qemu64' ; do \ set $i; \ runvm --user=buildbot --logfile=kernel_$2.log --base-image=$1 --port=$2 --cpu=$3 "$(echo $1 | sed -e 's/serial/upgrade/')" \ "sudo yum -y update" \ 'sudo yum -y install mysql-server' \ 'sudo systemctl enable mysqld.service' \ 'sudo systemctl start mysqld.service' \ 'mysql -uroot -e "create database mytest; use mytest; create table t(a int primary key); insert into t values (1); select * from t"' \ "= scp -P $2 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no /kvm/vms/MariaDB.local.repo buildbot@localhost:/tmp/" \ "sudo mv -vi /tmp/MariaDB.local.repo /etc/yum.repos.d/"; \ done
Le VM per l'aggiornamento del testing di MariaDB non sono state compilate. Quando ci saranno gli RPM di MariaDB per Fedora 16, si tenterà di compilare questa VM. Per ora, il testo provvisorio qui sotto è copiato dalla pagina Configurare Buildbot sulle Macchine Virtuali - CentOS 6.2.
Le VM per il testing dell'aggiornamento di MariaDB
for i in '/kvm/vms/vm-fedora16-amd64-serial.qcow2 2264 qemu64' '/kvm/vms/vm-fedora16-i386-serial.qcow2 2263 qemu64' ; do \ set $i; \ runvm --user=buildbot --logfile=kernel_$2.log --base-image=$1 --port=$2 --cpu=$3 "$(echo $1 | sed -e 's/serial/upgrade2/')" \ 'sudo yum -y update' \ "= scp -P $2 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no /kvm/vms/MariaDB.repo buildbot@localhost:/tmp/" \ 'sudo rpm --verbose --import http://downloads.mariadb.org/repo/RPM-GPG-KEY-MariaDB' \ 'sudo mv -vi /tmp/MariaDB.repo /etc/yum.repos.d/' \ 'sudo yum -y remove mysql-libs' \ 'sudo yum -y install MariaDB-server MariaDB-client MariaDB-test' \ 'sudo yum -y install cronie cronie-anacron crontabs.noarch postfix' \ 'sudo /etc/init.d/mysqld start' \ 'mysql -uroot -prootpass -e "create database mytest; use mytest; create table t(a int primary key); insert into t values (1); select * from t"' \ 'sudo rm -v /etc/yum.repos.d/MariaDB.repo' \ "= scp -P $2 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no /kvm/vms/MariaDB.local.repo buildbot@localhost:/tmp/" \ 'sudo mv -vi /tmp/MariaDB.local.repo /etc/yum.repos.d/'; \ done