Полезные команды: virsh

Создаем виртуальный домен:

virt-install --prompt --disk path=/var/lib/libvirt/images/centos.img,size=6 \
--graphics vnc,password=foobar,listen=0.0.0.0 -n centos -r 512 \
-c /var/lib/libvirt/images/CentOS-6.2-i386-netinstall.iso

Создаем виртуальный домен centos с установкой по сети:

virt-install --prompt --disk path=/var/lib/libvirt/images/centos.img,size=6 \
--graphics vnc,password=foobar,listen=0.0.0.0 -n centos -r 512 \
-l ftp://192.168.122.1/inst/ -x "ks=ftp://192.168.122.1/pub/anaconda-ks.cfg"

И такой же домен, но на дебиан.

virt-install --prompt --disk path=/var/lib/libvirt/images/debian.img,size=6 \
--graphics vnc,password=foobar,listen=0.0.0.0 -n debian -r 512 \
-l http://mirror.yandex.ru/debian/dists/Debian6.0.4/main/installer-i386/

Т.к. вывод идет на VNC, что бы вывод был в окно терминала надо дописать параметры:

-x "console=ttyS0,115200n8"

Остановить домен

virsh destroy centos

Удалить файл конфигурации (диск при этом не удалится)

virsh undefine centos

Подключиться к ttyS0, если он настроен:

virsh console centos

Скачать клиент VNC под Windows можно тут:
http://www.tightvnc.com/download.php

Install subversion on apache with https certificates

Необходимо настроить subversion с использованием сертификатов, вместо пары логин-пароль.

Как работает процедура сертификации:
1. создаем сервер сертификации;
2. выписываем сертификат сервера;
3. выписываем сертификат пользователя x509.

Ок, с сертификатами разобрались – начинаем ставить софт:

Апач умеет делать авторицацию по сертификатам, подставляя вместо логина DN от сертификата. Но апач в поле логина передает DN, а нам нужен только CN (имя пользователя) из всего DN.

Для примера, апач получает cn=admin,dc=example,dc=com, а нам нужно вытащить логин админ, для этого придется наложить патч на апач, который добавляет эту функциональность.

Bash
./patch_apache.sh

Теперь устанавливаем апач и пакеты:

Bash
cd build
dpkg -i apache2.2-bin* apache2.2-common*.deb apache2_2.2*.deb \
        apache2-mpm-prefork*.deb apache2-utils*.deb
apt-get install libapache2-svn

Настраиваем apache2

CONF
<VirtualHost *:443>
 
DocumentRoot /var/www/
ServerName svn.example.com:443
ServerAdmin admin@example.com
 
Loglevel warn
ErrorLog /var/log/apache2/error_ssl.log
CustomLog /var/log/apache2/access_ssl.log "%u %t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
 
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /etc/apache2/ssl.crt/server.crt
SSLCertificateKeyFile /etc/apache2/ssl.key/server.key
SSLCACertificateFile /etc/apache2/ssl.crt/ca.crt
SSLCARevocationFile /etc/ssl/client_certs/ca.crl
SSLVerifyClient require
SSLVerifyDepth 10
 
<Location /repos>
    SSLOptions +FakeBasicAuth
    SSLUserName SSL_CLIENT_S_DN_CN
    AuthName "SVN"
    AuthType Basic
    AuthUserFile /etc/apache2/fakeauth.passwd
 
    DAV svn
    SVNParentPath /var/svn-repos/
    AuthzSVNAccessFile /etc/apache2/authz
    require valid-user
</Location>
</VirtualHost>

Скрипты и патч

Установка RHEL / CentOS по сети

Установка

Установка будет проходить на RHEL6.

Устанавливаем tftp-server, dhcp, syslinux, httpd:

yum install tftp-server dhcp syslinux httpd

Включаем tftpd в xinet.d

vi /etc/xinetd.d/tftp
:%s/\(disable\s*=\s*\)yes/\1no/
:wq
service xinetd restart

Копируем файлы для загрузки по tftp:

cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot
cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot
cp /usr/share/syslinux/memdisk /var/lib/tftpboot
cp /usr/share/syslinux/mboot.c32 /var/lib/tftpboot
cp /usr/share/syslinux/chain.c32 /var/lib/tftpboot

Создадим папку для загрузочной конфигурации:

mkdir /var/lib/tftpboot/pxelinux.cfg

И создадим файл конфигурации

cat >/var/lib/tftpboot/pxelinux.cfg/default<<EOF
default install386
prompt 0
timeout 300
 
label install386
kernel images/i386/vmlinuz
append initrd=images/i386/initrd.img ramdisk_size=100000 ksdevice=eth0 ip=dhcp url --url http://192.168.0.109/mirror/
EOF

Копируем образы для загрузки:

mkdir -p /var/lib/tftpboot/images/{i386,x86_64}
cp /media/images/pxeboot/vmlinuz /tftpboot/images/i386/
cp /media/images/pxeboot/initrd.img /tftpboot/images/i386/

Конфигурация DHCPd:

cat >/etc/dhcp/dhcpd.conf<<EOF
allow booting;
allow bootp;
option option-128 code 128 = string;
option option-129 code 129 = text;
next-server 192.168.0.109;
filename "/pxelinux.0";
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.188 192.168.0.190;
}

Конфигурируем зеркало apache:

cat >/etc/httpd/conf.d/mirror.conf<<EOF
Alias /mirror/ /media/
<Directory /media/>
order allow,deny
Allow from All
Options +Indexes
</Directory>
EOF

Теперь есть настроенный dhcpd который ответит на запрос загрузки, tftp отдаст первоначальные файлы, а httpd послужит зеркалом для установки.

Проблемы:

Если что-то не работает, возможно это из-за работающего iptables и(или) selinux, отключаются они так:

iptables -F
setenforce Permissive

Install sphinx php module on Debian

Инструкция по сборке

В статье 2 раздела – инструкция и ошибки с которыми я столкнулся.

Будем собирать пакеты sphinxsesarch, php5-sphinx и libsphinxclient из исходных текстов.

Bash
mkdir sphinx && cd !:1
wget sphinx-2.0.3-release.tar.gz
tar xzf sphinx-2.0.3-release.tar.gz
cd sphinx-2.0.3-release
dh_make -s -f ../sphinx-2.0.3-release.tar.gz
dpkg-buildpackage

На этом моменте пакет собран, но в нем не хватает скрипта для init.d. Позже доваблю патч для init.

Теперь собираем библиотеку libsphinxclient

Bash
cd api/libsphinxclient
dh_make -s -n -p libsphinxclient_2.0.3 
dpkg-buildpackage

Пакет собран. Остался только php5-sphinx.

Bash
cd ../../..
dh-make-pecl --only 5 sphinx
cd php-sphinx-1.1.0
dpkg-buildpackage

Ошибки при сборке

1 .Пакет libsphinxclient ни в какую не хотел собираться, писал постоянно ошибку сборки

dpkg-source: error: can't build with source format '3.0 (quilt)': no orig.tar file found
dpkg-buildpackage: error: dpkg-source -b libsphinxclient gave error exit status 255

Не хватало каких-то параметров для автоматической сборки, каких именно я найти не смог. Пришлось переключить с quilt на native режим сборки. В будующих версиях дебиана могут быть проблемы.

2. Так же не проходил тест, отключил его в файле sphinx-2.0.3-release/test/Makefile закоментировав строчку:

#       php ubertest.php t -u test

Creating custom initrd with firmware

Небольшое хауту по установке firmware в загрузочный образ:

Bash
mkdir initrd
cp /tftpboot/squeeze-netboot/debian-installer/amd64/initrd.gz initrd/
cd initrd/
gzip -dc initrd.gz | cpio -id
cp -r /var/lib/firmware lib
find ./ | cpio -H newc -o > ../new-initrd.cpio
cd ..
gzip new-initrd.cpio
mv new-initrd.cpio.gz /tftpboot/squeeze-netboot/debian-installer/amd64/initrd.gz

PHPBTTracker HTTP 400 error

PHPBTTracker выдает ошибку только в одном месте:

PHP
1
if (!isset($_GET["info_hash"]) || !isset($_GET["peer_id"])) {

Если нет параметров info_hash или peer_id. Хотя uTorrent и передает параметры, они кем-то зарезались.

Оказалось, что это так отрабатывает защита suhosin.

Для решения необходимо дописать в конфиге виртуального хоста:

CONFIG
php_admin_value suhosin.get.disallow_nul 0
php_admin_value suhosin.post.disallow_nul 0
php_admin_value suhosin.request.disallow_nul 0

И все заработает.

Making Perl packages RPM

Маленький howto по сборке пакета на примере DateTime::TimeZone:

Bash
yum install cpanspec rpm-build perl-rpm-build-perl
 
mkdir -p rpm/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
cd rpm
wget 'http://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/DateTime-TimeZone-1.42.tar.gz'
cpanspec DateTime-TimeZone-1.42.tar.gz
mv DateTime-TimeZone-1.42.tar.gz SOURCES/
rpmbuild -ba perl-DateTime-TimeZone.spec

Используя эти команды собирается пакет который требует зависимости от винды, поэтому необходимо удалить файл DateTime-TimeZone-1.42/lib/DateTime/TimeZone/Local/Win32.pm и почистить его следы в файле DateTime-TimeZone-1.42/MANIFEST. После чего обратно запаковать файл DateTime-TimeZone-1.42.tar.gz:

Bash
cd ~/rpm/SOURCES
tar -czvf DateTime-TimeZone-1.42.tar.gz DateTime-TimeZone-1.42

perl-DateTime-TimeZone-1.42-1.noarch.rpm

Debian automated install

По следам статьи debian headless install пишется этот мануал по полной автоматизации установки параметров системы и запросом по разбиению дисков.

Настройка сервера сетевой загрузки рассматривается в первой статье. Тут я опишу только настройки необходимые для автоматической установки.

Процедура установки выглядит следующим образом

  • загрузка netboot образа по сети
  • соединение по ssh
  • разбиение дисков и завершение устновки

Директории которые будут использованы:
/var/www – директория где хранится конфигурация preseed.cfg.
/tftpboot – директория загрузки образа
/opt/config_files – файлы конфигурации и итоговый скрипт, который пропишет все настройки
»Read More

Aptitude unable to install update

Если возникает ошибка

Bash
E: I wasn't able to locate a file for the linux-image-2.6.32-5-xen-amd64 package                                                                              . This might mean you need to manually fix this package. (due to missing arch)
Writing extended state information... Done

тогда надо вычистить БД от этой записи:

Bash
dpkg --force-remove-reinstreq --remove linux-image-2.6.32-5-xen-amd64

Debootstrap debian on centos

Монтирование раздела, если на LV лежит образ диска с MBR.

Bash
kpartx -a /dev/main/www
mount /dev/mapper/main-www1 /mnt/debian

и размонтирование:

Bash
umount /mnt/debian
kpartx -d /dev/main/www

Разворачивание образа Debian Squeeze из CentOS.

Bash
debootstrap --arch i386 squeeze /mnt/debian http://mirror.yandex.ru/debian

Честно взято отсюда:

http://xen.kyl191.net/2009/12/31/debian-domu-on-centos-5-4-dom0-using-debootstrap/