Configurare Buildbot sulle Macchine Virtuali - CentOS 6.2
Contents
Installazione Base
qemu-img create -f qcow2 /kvm/vms/vm-centos6-amd64-serial.qcow2 8G qemu-img create -f qcow2 /kvm/vms/vm-centos6-i386-serial.qcow2 8G
Avviare tutte le VM dalla iso del server, una per volta, e seguire queste istruzioni:
kvm -m 1024 -hda /kvm/vms/vm-centos6-amd64-serial.qcow2 -cdrom /kvm/iso/centos/CentOS-6.2-x86_64-bin-DVD1.iso -redir tcp:22255::22 -boot d -smp 2 -cpu qemu64 -net nic,model=virtio -net user kvm -m 1024 -hda /kvm/vms/vm-centos6-i386-serial.qcow2 -cdrom /kvm/iso/centos/CentOS-6.2-i386-bin-DVD1.iso -redir tcp:22256::22 -boot d -smp 2 -cpu qemu32,-nx -net nic,model=virtio -net user
Quando è in esecuzione, si può connettersi al server VNC con:
vncviewer -via ${remote-host} localhost
Sostituire ${remote-host} con l'host su cui si trova la VM.
Nota: Quando si attiva l'installazione, vncviewer potrebbe disconnettersi dicendo che il rect è troppo grande. Va tutto bene. L'installer di CentOS ha solo ridimensionato lo schermo di vnc. Basta riconnettersi.
Installare e tenere per lo più le opzioni di default, ma con qualche accorgimento:
- L'installer lancerà uno "Storage Device Warning", scegliere "Yes, discard any data"
- Impostare l'hostname a centos6-amd64 (o centos6-i386)
- Cliccare il bottone "Configure Network" sulla schermata Hostname.
- Cambiare System eth0 in "connect automatically"
- Scegliere Apply e chiudere la finestra "Network Connections"
- Impostare la Timezone a Europe/Helsinki (mantenere "System clock uses UTC" spuntato)
- Se si partizionano i dischi, scegliere "Use All Space"
- non spuntare la casella "Encrypt system"
- spuntare la casella "Review and modify partitioning layout"
- Cancellare ciò che riguarda LVM e lasciare solo la partizione sda1 partition, ripartizionare il volume fisico come segue
Device | Size(MB) | Mount Point | Type | Format |
---|---|---|---|---|
sda2 | 5672 | / | ext4 | yes |
sda3 | (max allowable) | (n/a) | swap | yes |
- Installazione minima
- Personalizzare più tardi
Al termine dell'installazione, viene chiesto di riavviare. Bisogna farlo, ma fallirà. Terminare la VM (dopo che il boot fallisce) e avviarla di nuovo:
kvm -m 1024 -hda /kvm/vms/vm-centos6-amd64-serial.qcow2 -redir tcp:22255::22 -boot c -smp 2 -cpu qemu64 -net nic,model=virtio -net user kvm -m 1024 -hda /kvm/vms/vm-centos6-i386-serial.qcow2 -redir tcp:22256::22 -boot c -smp 2 -cpu qemu32,-nx -net nic,model=virtio -net user
Si può connettersi via VNC come prima, ma ssh probabilmente è meglio. Entrare come root.
Ora che l'installazione della VM è terminata, occorre configurarla.
ssh -p 22255 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i ~/.ssh/buildbot.id_dsa root@localhost ssh -p 22256 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i ~/.ssh/buildbot.id_dsa root@localhost
Dopo aver effettuato il login come root, si crei l'utente locale
adduser ${username} usermod -a -G wheel ${username} passwd ${username}
Si abiliti il sudo senza password e la console seriale:
visudo # decommentare la riga "%wheel ALL=(ALL) NOPASSWD: ALL" # Commentare questa riga: # Defaults requiretty
Sempre loggati come root, aggiungere a /boot/grub/menu.lst:
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1 terminal --timeout=3 serial console
inoltre aggiungere in menu.lst alla riga del kernel (cancellando 'quiet'):
console=tty0 console=ttyS0,115200n8
Aggiungere il prompt del login alla console seriale:
cat >>/etc/inittab <<END # Console seriale. S0:2345:respawn:/sbin/agetty -h -L ttyS0 19200 vt100 END
Fare il logout da root, e poi, dall'host server della VM:
Installare ssh:
ssh -t -p 22255 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i ~/.ssh/buildbot.id_dsa localhost "sudo yum install openssh-server openssh-clients" ssh -t -p 22256 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i ~/.ssh/buildbot.id_dsa localhost "sudo yum install openssh-server openssh-clients"
Creare una directory .ssh:
ssh -t -p 22255 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i ~/.ssh/buildbot.id_dsa localhost "mkdir -v .ssh" ssh -t -p 22256 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i ~/.ssh/buildbot.id_dsa localhost "mkdir -v .ssh"
Copiare i file delle chiavi autorizzate:
scp -P 22255 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no /kvm/vms/authorized_keys localhost:.ssh/ scp -P 22256 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no /kvm/vms/authorized_keys localhost:.ssh/
Impostare i permessi sulla directory .ssh:
ssh -t -p 22255 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i ~/.ssh/buildbot.id_dsa localhost "chmod -R go-rwx .ssh" ssh -t -p 22256 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i ~/.ssh/buildbot.id_dsa localhost "chmod -R go-rwx .ssh"
Creare l'utente buildbot:
ssh -p 22255 -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 22256 -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'
Caricare il file ttyS0.conf e metterlo al suo posto:
scp -P 22255 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no /kvm/vms/ttyS0.conf buildbot@localhost: scp -P 22256 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no /kvm/vms/ttyS0.conf buildbot@localhost: ssh -p 22255 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no buildbot@localhost 'sudo cp -vi ttyS0.conf /etc/init/; rm -v ttyS0.conf;' ssh -p 22256 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no buildbot@localhost 'sudo cp -vi ttyS0.conf /etc/init/; rm -v ttyS0.conf;'
Aggiornare la VM:
ssh -p 22255 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no buildbot@localhost ssh -p 22256 -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-centos6-amd64-serial.qcow2 22255 qemu64' '/kvm/vms/vm-centos6-i386-serial.qcow2 22256 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 testare l'installazione
MariaDB.local.repo
punta alla directory locale della VM. MariaDB.repo
punta al verso repository YUM di MariaDB.
for i in '/kvm/vms/vm-centos6-amd64-serial.qcow2 22255 qemu64' '/kvm/vms/vm-centos6-i386-serial.qcow2 22256 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
VM per testare l'upgrade da MySQL
for i in '/kvm/vms/vm-centos6-amd64-serial.qcow2 22255 qemu64' '/kvm/vms/vm-centos6-i386-serial.qcow2 22256 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 /etc/init.d/mysqld start' \ '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 del testing dell'upgrade di MariaDB non sono state compilate. Attualmente c'è un errore nell'installare MariaDB dal repo YUM.
Le VM per il test dell'upgrade di MariaDB
for i in '/kvm/vms/vm-centos6-amd64-serial.qcow2 22255 qemu64' '/kvm/vms/vm-centos6-i386-serial.qcow2 22256 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