pátek 2. října 2009

SVN a Trac hooks

SVN a Trac hooks slouží k provázání SVN a Trac. Commit do SVN se nepovolí pokud není v komentáři odkazovaný nějaký ticket. Během commitu se v souborech nahradí proměnné odkazující na aktuální verzi, datum a čas commitu a člověka, který soubor commitoval. Po commitu se automaticky připojí komentář ke všem odkazovaným ticketům a případně se tickety zavřou.

Instalace

Trac
  • Nakopírovat skripty trac-pre-commit-hook a trac-post-commit-hook do /home/trac/projekty/conf (pozor na stažení správně verze skriptů podle verze nainstalovaného Trac)
  • Nastavit práva pro spuštění: chmod u+x /home/trac/projekty/conf/trac-pre-commit-hook /home/trac/projekty/conf/trac-post-commit-hook

SVN
  • mv /home/svn/projekty/hooks/pre-commit.tmpl /home/svn/projekty/hooks/pre-commit
  • Upravit /home/svn/projekty/hooks/pre-commit na
    REPOS="$1"
    TXN="$2"
    TRAC_ENV="/home/trac/projekty/"
    LOG=`/usr/bin/svnlook log -t "$TXN" "$REPOS"`
    /home/trac/projekty/conf/trac-pre-commit-hook "$TRAC_ENV" "$LOG" || exit 1
    
    # Exit on all errors.
    set -e
    
    # All checks passed, so allow the commit.
    exit 0
  • Nastavit práva pro spuštění: chmod u+x /home/svn/projekty/hooks/pre-commit
  • mv /home/svn/projekty/hooks/post-commit.tmpl /home/svn/projekty/hooks/post-commit
  • Upravit /home/svn/projekty/hooks/post-commit na
    REPOS="$1"
    REV="$2"
    TRAC_ENV="/home/trac/projekty/"
    
    /home/trac/projekty/conf/trac-post-commit-hook -p "$TRAC_ENV" -r "$REV"
    
  • Nastavit práva pro spuštění: chmod u+x /home/svn/projekty/hooks/post-commit
  • Ve skriptech doplnit lokalizavi klíčových slov: vizrefoprava
Nahrazování proměnných

Nastavení se musí udělat na klientu v souboru <uživatelský adresář>\Application Data\Subversion\config pomocí auto-props. A když už se edituje, tak doporučuju nastavit global-ignore. Moje nastavení:
[miscellany]
global-ignores = *.~* *.bak *.dcu *.DCU *.old *.pyc tags *.swp
enable-auto-props = yes

[auto-props]
*.txt = svn:eol-style=native
*.py = svn:eol-style=native;svn:keywords="Date Author Revision Id"
*.pas = svn:eol-style=native;svn:keywords="Date Author Revision Id"
*.png = svn:mime-type=image/png
*.jpg = svn:mime-type=image/jpeg
V souborech *.pas a *.py se budou při commitu nahrazovat aktuálním stavem tyto řetězce:
  • $Rev$
  • $Author$ 
  • $Date$
  • $Id$

Zálohování a obnova SVN a Trac

Debian se SVN a Trac běží ve VirtualBoxu, který je hostovaný ve Windows 7 - viz předchozí blog. Zálohovat se tedy bude do sdíleného adresáře z Windows 7.

Nastavení Windows 7
  • vytvořit adresář na zálohy: c:\backup
  • vytvořit uživatele Backup s heslem
  • nasdílet c:\backup tak, že jen uživatel Backup do něj má právo zápisu a ostatní nic
Nastavení Debianu
  • apt-get install winbind smbclient smbfs bzip2
  • nastavit Workgroup, nepoužívat WINS z DHCP
  • v /etc/nsswitch.conf upravit řádku s host na:
    hosts:     files wins dns
  • otestovat sdílení: smbclient -L server -U Backup
    po zadání hesla vypíše seznam sdílených adresářů
    svntrac:~# smbclient -L server -U Backup
    Enter Backup's password:
    Domain=[SERVER] OS=[Windows 7 Professional 7600] Server=[Windows 7 Professional 6.1]
    
            Sharename       Type      Comment
            ---------       ----      -------
            ADMIN$          Disk      Remote Admin
            Backup          Disk
            C$              Disk      Default share
            IPC$            IPC       Remote IPC
    Domain=[SERVER] OS=[Windows 7 Professional 7600] Server=[Windows 7 Professional 6.1]
    
            Server               Comment
            ---------            -------
    
            Workgroup            Master
            ---------            -------
    
  • vytvořit mount-adresář : mkdir /mnt/backup
  • namountovat ručně: mount -o user=backup -t smbfs //server/backup /mnt/backup
  • pokud funguje, tak nastavit automatické mountování upravením /etc/fstab:
    //server/backup /mnt/backup     smbfs   user=backup,password=backup,file_mode=0777,dir_mode=0777 0 0
  • restart a zkusit, že to funguje
  • pokud je heslo příliš dlouhé (víc jak 16 znaků) anebo vadí, že je v /etc/fstab viditelné, tak se musí vytvořit soubor s hesly:
    vim /root/.smbcredentials
    username=backup
    password=backuppassword
    chmod 700 /root/.smbcredentials
    //server/backup /mnt/backup     smbfs   credentials=/root/.smbcredentials,file_mode=0777,dir_mode=0777 0 0

Zálohování

Trac
  • mkdir /mnt/backup/trac
  • Vytvořit skript trac-backup.sh
    #!/bin/sh
    projekt="bakalari"
    tmpdir="/tmp/trac"
    rm -rf $tmpdir
    mkdir $tmpdir
    
    backupfile=$tmpdir"/"$projekt"."`eval date +%Y%m%d%H%M`".tgz"
    trac-admin /home/trac/$projekt hotcopy $tmpdir"/"$projekt
    tar -jcf $backupfile -C $tmpdir $projekt 
    cp $backupfile /mnt/backup/trac
  • chmod u+x trac-backup.sh
  • Spustit: ./trac-backup.sh
    V /mnt/backup/trac by se měl vytvořit soubor projekty.YYYYmmddHHMM.tgz, který obsahuje zálohu Tracu. Je komprimovaný pomocí bzip2.
  • Nastavit denní zálohování: do crontab -e přidat
    35 3 * * * /root/trac-bakalari-backup.sh
SVN
Zálohuje se jak hotcopy, tak dump. Hotcopy není jednoduše přenositelný na jiný systém, ale zálohuje i pre/post commit skripty.
  • mkdir /mnt/backup/svn
  • Vytvořit skript svn-backup.sh:
    #!/bin/sh
    projekt="bakalari"
    tmpdir="/tmp/svn"
    rm -rf $tmpdir
    mkdir $tmpdir
    
    backupfile=$tmpdir"/"$projekt".dump."`eval date +%Y%m%d%H%M`".tgz"
    svnadmin dump /home/svn/$projekt | bzip2 -c > $backupfile
    cp $backupfile /mnt/backup/svn
    
    backupfile=$tmpdir"/"$projekt"."`eval date +%Y%m%d%H%M`".tgz"
    svnadmin hotcopy /home/svn/$projekt $tmpdir"/"$projekt
    tar -jcf $backupfile -C $tmpdir $projekt 
    cp $backupfile /mnt/backup/svn
  • chmod u+x trac-backup.sh
  • Spustit: ./svn-backup.sh
    /mnt/backup/svn by se měly vytvořit soubor projekty.dump.YYYYmmddHHMM.tgz, a projekty.YYYYmmddHHMM.tgz které obsahují dump a hotcopy zálohu SVN. Jsou komprimovaný pomocí bzip2.
  • Nastavit denní zálohování: do crontab -e přidat
    35 3 * * * /root/svn-bakalari-backup.sh
Poznámka: Nakonec zálohuju jen hotcopy - přenos na jinej systém nehrozí, protože SVN běží ve virtuálním počítači. A případný dump se dá jednoduše udělat.

Obnova

Trac
  • Zastavit Apache: /etc/init.d/apache2 stop
  • Smazat aktuální verzi: rm -rf /home/trac/projekty
  • Nahrát zálohu: tar -xvkjf zaloha.tgz -C /home/svn/
  • Upravit práva:
    • chown -R www-data.www-data /home/svn/projekty
    • chmod -R g+ws /home/svn/projekty
  • Spustit Apache: /etc/init.d/apache2 start
Obnova SVN - z hotcopy
  • Zastavit Apache: /etc/init.d/apache2 stop
  • Smazat aktuální repozitář: rm -rf /home/svn/projekty
  • Nahrát zálohu: tar -xvkjf zaloha.tgz -C /home/svn/
  • Upravit práva:
    • chown -R www-data.www-data /home/trac/projekty
  • Spustit Apache: /etc/init.d/apache2 start
  • Klienti musí znovu provést checkout pokud jsou na vyšší verzi než byla záloha.
Obnova SVN - z dump
  • Zastavit Apache: /etc/init.d/apache2 stop
  • Smazat aktuální repozitář: rm -rf /home/svn/projekty
  • Vytvořit ho znovu: svnadmin create /home/svn/projekty
  • Upravit práva:
    • chown -R www-data.www-data /home/svn/projekty
    • chmod -R g+ws /home/svn/projekty
  • Nahrát zálohu: bunzip2 -kc zaloha.dump.tgz | svnadmin load /home/svn/projekty
  • Spustit Apache: /etc/init.d/apache2 start
  • Klienti musí znovu provést checkout pokud jsou na vyšší verzi než byla záloha.

čtvrtek 1. října 2009

Instalace Debianu do VirtualBoxu pro SVN a Trac

Prostředí se bude používat jako server pro SVN a Trac.

Vytvoření virtuálního počítače a instalace Debianu
  1. Vytvořit standardní Virtual Machine (VM) pro Debian:
    • Jméno: SVNTrac
    • OS: Linux, Version: Debian
    • RAM: 256 MB
    • HDD: 500 GB data
    • CD-ROM: ISO image debian-503-i386-businesscard.iso (Official businesscard images for the "stable" release - i386 verze)
  2. Spustit VM a vybrat textovou instalaci: Install
  3. Hostname: svntrac, Domain: <nic>
  4. Partition disks:
    • Guided - use entire disk
    • Separate /home partition
  5. User: trac
  6. Software collections: Standard system
  7. Přihlásit se lokálně jako root:
    • Do /etc/apt/sources.list přidat:
      deb http//:ftp.cz.debian.org/debian unstable main
    • Vytvořit /etc/apt/apt.conf a vložit do něj (viz Jak udržovat smíšený systém):
      APT::Default-Release stable
    • Spustit:
      apt-get update
      apt-get upgrade
    • Instalace balíčků ze stabilního repositáře:
      apt-get install ssl-cert openssh-server libapache2-mod-python libapache2-mod-python-doc
    • Instalace balíčků ze nestabilního repositáře (chceme poslední dostupnou verzi):
      apt-get install -t unstable subversion subversion-tools trac python-setuptools libapache2-svn
    • Odhlásit se lokálně a příhlásit se vzdáleně přes SSH
Konfigurace Apache
  1. Nastavit správné ServerName v /etc/apache2/httpd.conf:
    ServerName moje.domena.cz
    Nenastavení správné domény vede později k obskurní chybě:
    svn: OPTIONS of 'https://svn.example.com/repos':
    SSL negotiation failed: SSL error code -1/1/336032856
  2. Povolit SSL:
    a2enmod ssl
  3. Povolit port 443 přidáním řádku do /etc/apache2/ports.conf:
    Listen 443
  4. Vygenerovat SSL certifikát (hostname svntrac):
  5. mkdir /etc/apache2/ssl
    make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem
  6. Vytvořit virtuálního hosta:
    • cp /etc/apache2/sites-available/default /etc/apache2/sites-enabled/svntrac
    • Upravit konfiguraci: vim /etc/apache2/sites-enabled/svntrac
      NameVirtualHost *:443
      <virtualhost *:443="">
              ServerAdmin mail@mail.cz
              ErrorLog /var/log/apache2/error.log
              LogLevel warn
              CustomLog /var/log/apache2/access.log combined
              SSLEngine on
              SSLCertificateFile /etc/apache2/ssl/apache.pem
              SSLProtocol all -SSLv2
              SSLCipherSuite HIGH
      </virtualhost>
      
  7. Restartovat Apache: /etc/init.d/apache2 restart
    • Varování o jménu serveru jde zrušit přidáním ServerName svntrac do /etc/apache2/apache2.conf
    • Virtuální host už je povolený - pokud ne, povolit ho: a2ensite svntrac
  8. Vyzkoušet https://localhost/. Bude si stěžovat na neplatný certifikát, protože jsme si ho sami vytvořili. Na stránce by mělo být zobrazeno:
    It works!
Konfgurace SVN
  1. Vytvořit adresář pro svn data: mkdir /home/svn
  2. Vytvořit repozitář pro projekty: svnadmin create /home/svn/projekty
  3. Upravit práva: 
    • chown -R www-data.www-data /home/svn/projekty
    • chmod -R g+ws /home/svn/projekty
  4. Vytvořit soubor s hesly na basic authentification pro Apache:
    • htpasswd -c -m /etc/apache2/dav_svn.passwd cenovsky
    • Další uživatelé už bez -c: htpasswd -m /etc/apache2/dav_svn.passwd honza
  5. Povolit WebDAV v Apachi: vim /etc/apache2/mods-available/dav_svn.conf
    <Location /svn>
        DAV svn
        SVNParentPath /home/svn
        AuthType Basic
        AuthName "Subversion Repository"
        AuthUserFile /etc/apache2/dav_svn.passwd
        SSLRequireSSL
        Require valid-user
    </Location>
    
    V konfiguračním souboru je předdefinovaná varianta, kdy anonymní uživatelé mohou repozitář číst. Já to nechci, takže jsem <LimitExcept> zrušil a přidal SSLRequireSSL.
  6. Restartovat Apache: /etc/init.d/apache2 restart
    Vyzkoušet: https://localhost/svn/projekty. Na stránce by mělo být zobrazeno:
    projekty - Revision 0:/
  7. Naimportovat SVN repozitář (pokud už existoval): svnadmin load /home/svn/projekty <projekty.dump
Konfigurace Trac
  1. Trac je nainstalovaný v /usr/share/pyshared/trac
  2. Měl by být k dispozici adresář /home/trac. Pokud ne, tak vytvořit.
  3. Vytvořit prostředí pro projekty:
    • cd /home/trac
    • trac-admin projekty initenv
  4. Změnit vlastníka adresáře /home/trac: chown www-data:www-data -R /home/trac
  5. Vytvořit administrátora: trac-admin projekty permission add jmeno TRAC_ADMIN
  6. Upravit konfiguraci Trac: vim /home/trac/projekty/conf/trac.ini
  7. Přidat do konfigurace Apache: vim /etc/apache2/sites-enabled/svntrac
    <location /trac>
        SetHandler mod_python
        PythonInterpreter main_interpreter
        PythonHandler trac.web.modpython_frontend
        PythonOption TracEnvParentDir /home/trac
        PythonOption TracUriRoot /trac
        AuthType Basic
        AuthName "Projekty"
        AuthUserFile /etc/apache2/dav_svn.passwd
        Require valid-user
        SSLRequireSSL
    <location>
    
  8. Restartovat Apache: /etc/init.d/apache2 restart
  9. Vyzkoušet https://localhost/trac/projekty - měla by se zobrazit hlavní stránka Tracu s přihlášeným uživatelem (na základě Basic autentikace).
Trac plugins

Pluginy jsou popsány v samostatném článku.

Ostatní

  • Přidat do cronu aktualizaci času pomocí ntpdate pool.ntp.org
  • Zakázat ssh pro roota: vim /etc/ssh/sshd_config
    PermitRootLogin no
    /etc/init.d/ssh restart
  • Zakázání uživatele: passwd trac -l
  • český formát datumu
    • dpkg-reconfigure locales - přidat cs_CZ.UTF-8 UTF-8
    • přidat do /etc/apache2/sites-enabled/svntrac, sekce <location /trac>
    • PythonOption TracLocale "cs_CZ.utf-8"