Configurare Buildbot per le Macchine Virtuali - Fedora 17
Contents
Installazione base
qemu-img create -f qcow2 /kvm/vms/vm-fedora17-i386-serial.qcow2 10G qemu-img create -f qcow2 /kvm/vms/vm-fedora17-amd64-serial.qcow2 10G
Avviare ogni VM dalla iso di installazione del server una alla volte, ed eseguire questi comandi:
kvm -m 1024 -hda /kvm/vms/vm-fedora17-i386-serial.qcow2 -cdrom /kvm/iso/fedora/Fedora-17-i386-DVD.iso -redir tcp:2265::22 -boot d -smp 2 -cpu qemu32,-nx -net nic,model=virtio -net user kvm -m 1024 -hda /kvm/vms/vm-fedora17-amd64-serial.qcow2 -cdrom /kvm/iso/fedora/Fedora-17-x86_64-DVD.iso -redir tcp:2266::22 -boot d -smp 2 -cpu qemu64 -net nic,model=virtio -net user
Una volta avviate, si può connettersi al server VNC dall'host locale con:
vncviewer -via ${remote-host} localhost
Rimpiazzare ${remote-host} con l'host su cui gira la VM.
Nota: Quando si attiva l'installazione, vncviewer potrebbe disconnettersi dicendo che il rect è troppo grande. This is fine. L'installer di Fedora ha semplicemente ridimensionato lo schermo vnc. Basta riconnettersi.
Installare, mantenendo perloppiù le opzioni predefinite, con qualche accorgimento:
- L'Installer mostra uno "Storage Device Warning", scegliere "Yes, discard any data"
- Impostare l'hostname a fedora17-amd64 (o fedora17-i386)
- Cliccare il bottone "Configure Network" sulla schermata Hostname.
- Modificare System eth0 in "connect automatically"
- Applicare i cambiamenti e chiudere la finestra "Network Connections"
- Al momento di partizionare i dischi, scegliere "Use All Space"
- deselezionare la casella "Use LVM"
- non selezionare la casella "Encrypt system"
- Installazione minima
- Personalizzare più tardi
Al termine dell'installazione, chiede di riavviare. Lo si faccia, ma il boot fallirà. Terminare la VM (dopo che il boot è fallito) e riavviarla:
kvm -m 1024 -hda /kvm/vms/vm-fedora17-i386-serial.qcow2 -redir tcp:2265::22 -boot c -smp 2 -cpu qemu32,-nx -net nic,model=virtio -net user kvm -m 1024 -hda /kvm/vms/vm-fedora17-amd64-serial.qcow2 -redir tcp:2266::22 -boot c -smp 2 -cpu qemu64 -net nic,model=virtio -net user
Finché non si installa un nuovo utente occorre loggarsi tramite VNC come prima. SSH è preferibile, quindi questo sarà il prossimo passo. Loggarsi come root.
ssh -p 2265 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i ~/.ssh/buildbot.id_dsa root@localhost ssh -p 2266 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i ~/.ssh/buildbot.id_dsa root@localhost
Dopo essere entrati come root, installare ssh e creare un 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 sudo senza password e la console seriale:
visudo # Decommentare la riga "%wheel ALL=(ALL) NOPASSWD: ALL" # Commentare questa riga: # Defaults requiretty
Sempre 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 della VM:
Creare una directory .ssh:
ssh -t -p 2265 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i ~/.ssh/buildbot.id_dsa localhost "mkdir -v .ssh" ssh -t -p 2266 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i ~/.ssh/buildbot.id_dsa localhost "mkdir -v .ssh"
Copiarci dentro il file delle chiavi autorizzate:
scp -P 2265 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no /kvm/vms/authorized_keys localhost:.ssh/ scp -P 2266 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no /kvm/vms/authorized_keys localhost:.ssh/
Impostare i permessi corretti sulla directory .ssh:
ssh -t -p 2265 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i ~/.ssh/buildbot.id_dsa localhost "chmod -R go-rwx .ssh" ssh -t -p 2266 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i ~/.ssh/buildbot.id_dsa localhost "chmod -R go-rwx .ssh"
Creare l'utente buildbot:
ssh -p 2265 -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 2266 -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'
Eseguire su sull'utente buildbot locale e connettersi via ssh alla vm per inserire la chiave in known_hosts:
Su i386:
sudo su - buildbot ssh -p 2265 buildbot@localhost # uscire e riprovare
Su amd64:
sudo su - buildbot ssh -p 2266 buildbot@localhost # uscire e riprovare
Caricare il file ttyS0 e metterlo al suo posto:
scp -P 2265 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no /kvm/vms/ttyS0 buildbot@localhost: scp -P 2266 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no /kvm/vms/ttyS0 buildbot@localhost: ssh -p 2265 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no buildbot@localhost 'sudo mv -vi ttyS0 /etc/event.d/;' ssh -p 2266 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no buildbot@localhost 'sudo mv -vi ttyS0 /etc/event.d/;'
Aggiornare la VM:
ssh -p 2265 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no buildbot@localhost ssh -p 2266 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no buildbot@localhost
Una volta dentro:
sudo yum update
Dopo l'aggiornamento, arrestare la VM:
sudo shutdown -h now
VMs for building .rpms
for i in '/kvm/vms/vm-fedora17-amd64-serial.qcow2 2266 qemu64' '/kvm/vms/vm-fedora17-i386-serial.qcow2 2265 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
Also:
VMs for install testing.
MariaDB.local.repo
points at a local directory on the VM. MariaDB.repo
points at the real MariaDB YUM repository.
for i in '/kvm/vms/vm-fedora17-amd64-serial.qcow2 2266 qemu64' '/kvm/vms/vm-fedora17-i386-serial.qcow2 2265 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
VMs for MySQL upgrade testing
for i in '/kvm/vms/vm-fedora17-amd64-serial.qcow2 2266 qemu64' '/kvm/vms/vm-fedora17-i386-serial.qcow2 2265 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
The MariaDB upgrade testing VMs were not built. Once we have MariaDB Fedora 17 RPMs, then I will attempt building this VM. For now, the placeholder text below is copied from the Buildbot Setup for Virtual Machines - CentOS 6.2 page.
VMs for MariaDB upgrade testing
for i in '/kvm/vms/vm-fedora17-amd64-serial.qcow2 2266 qemu64' '/kvm/vms/vm-fedora17-i386-serial.qcow2 2265 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