sobota 30. června 2012

VirtualBox, Debian, Hg, Trac

Prostředí se bude používat jako server pro Mercurial a Trac.
Vytvoření virtuálního počítače a instalace Debianu
  1. Vytvořit standardní Virtual Machine (VM) pro Debian:
    • Jméno: HgTrac
    • OS: Linux, Version: Debian
    • RAM: 256 MB
    • HDD: 100 GB data
    • CD-ROM: CD1 ISO image - i386 verze
    • Network: Bridged Adapter
  2. Spustit VM a vybrat textovou instalaci: Install
  3. Locale: english-us
  4. Hostname: hgtrac, Domain: cendaweb.cz
  5. User: trac - uživatel, pod kterým běží trac i má uložený hg repositáře
  6. Partition disks:
    • Guided - use entire disk
    • one partition
  7. Software collections: Standard system utilities, Web server, SSH server
  8. Příhlásit se vzdáleně přes SSH
  9. SSH s klíčema
    1. Na stroji odkud se chci hlásit si vygeneruju klíče:
      ssh-keygen
      Windows: spustit puttygen.exe, vygenerovat klíč, uložit privátní klíč
    2. Veřejný klíč zkopíruju na stroj kam se chci hlásit:
      scp -P 22 id_dsa.pub user@remote:~/
      Windows: nic
    3. Na stroji kam se chci hlásit přidám zkopírovaný klíč do autorizovaných klíčů:
      cat id_dsa.pub >> ~/.ssh/authorized_keys2
      Windows: vložit vše z políčka Public key for pasting... do authorized_keys2
    4. Smažu id_dsa.pub:
      rm id_dsa.pub
    5. Případně pořeším práva:
      chmod 600 ~/.ssh/authorized_keys2
  10. Zakázání SSH autorizace heslem
    V /etc/ssh/sshd_config musí být:
    • RSAAuthentication yes (defaultní hodnota)
    • PubkeyAuthentication yes (defaultní hodnota)
    • ChallengeResponseAuthentication no
    • PasswordAuthentication no
    • UsePAM no
    Pak aktualizovat ssh: sudo /etc/init.d/ssh reload


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/hgtrac
    • Upravit konfiguraci: vim /etc/apache2/sites-enabled/hgtrac přidáním chybějících řádků:
      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 Hg
  1. Nainstalovat Mercurial:
    1. Use www.backports.org to install the newest mercurial
    2. apt-get -t squeeze-backports install mercurial -V
  2. Nainstalovat Trac (příště na všechno použít easy-install):
    1. apt-get install -V python-setuptools
    2. apt-get install -V python-genshi
    3. apt-get install -V python-babel
    4. apt-get install -V python-pygments
    5. apt-get install -V python-docutils
    6. apt-get install subversion
    7. easy_install -U Trac==dev
    8. svn co http://svn.edgewall.com/repos/trac/plugins/0.13/mercurial-plugin
      1. cd mercurial-plugin
      2. python setup.py bdist_egg
      3. python setup.py install
  3. Hg repositáře vytvořit uživatelem trac v jeho home adresáři. Vzdáleně se k nim přistupuje i z Windows přes ssh
    1. Grab putty.exe and plink.exe from PuTTY website.
    2. Connect to remote ssh host over ssh using PuTTY once and have PuTTY save its key as a known host.
       Or run "C:\path to\plink.exe" -ssh -i "C:\your path to\private.key" user@server.com to add it.
    3. Add the following to the [ui] section of your ~/Mercurial.ini file
       ssh="C:\path to\plink.exe" -ssh -i "C:\your path to\private.key"
    4. Profit:
       hg clone ssh://user@server.com:/hg/repository (repository must exist)
    
  4. Configure Trac
    1. trac-admin trac/local initenv
    2. trac-admin /home/trac/trac/local/ deploy /home/trac/deploy
    3. mv deploy/* trac/
    4. Změnit vlastníka adresáře /home/trac/trac: chown www-data:www-data -R /home/trac/trac
    5. Vytvořit administrátora: trac-admin /home/trac/trac/local permission add jmeno TRAC_ADMIN
    6. Upravit konfiguraci Trac: vim /home/trac/trac/local/conf/trac.ini
    7. apt-get install libapache2-mod-wsgi
    8. Přidat do konfigurace Apache: vim /etc/apache2/sites-enabled/hgtrac
      WSGIScriptAlias /trac /home/trac/trac/cgi-bin/trac.wsgi
      
      <Directory /home/trac/trac/cgi-bin>
          WSGIApplicationGroup %{GLOBAL}
          Order deny,allow
          Allow from all
      </Directory>
      
    9. Vytvořit soubor s hesly na basic authentification pro Apache:
      htpasswd -c /etc/apache2/trac.passwd cenovsky
      Další uživatelé už bez -c:
      htpasswd /etc/apache2/trac.passwd honza
    10. Upravit /etc/apache2/sites-enabled/hgtrac:
      RedirectMatch ^/$ /trac/
      <location /trac>
          AuthType Basic
          AuthName "Trac"
          AuthUserFile /etc/apache2/trac.passwd
          Require valid-user
          SSLRequireSSL
      </location>
      
    11. Přesměrovat vše z portu 80 na 443 (/etc/apache2/sites-enabled/default):
      Redirect permanent / https://vase.stranky.cz/
      
  5. Konverze svn -> hg na Windows:
    1. hg clone svn+https://trac.bakalari.cz/svnprivate C:\src\svnprivate
      
    2. Create c:\src\svnprivate\rename.py:
      import sys
      for path in sys.stdin:
          old = path[:-1] # strip newline
          new = old.decode("utf-8").encode("cp1250")
          print 'rename "%s" "%s"' % (old, new)
      
    3. V c:\src\svnprivate\ spustit:
      hg manifest --all | C:\Python27\python.exe rename.py > rename.txt
      
    4. hg convert --filemap C:\src\svnprivate\rename.txt svnprivate svnprivate2
      
  6. Zprovoznění Hg v Tracu

Trac plugins
Pluginy jsou popsány v samostatném článku.
Ostatní
  • Přidat do cronu aktualizaci času pomocí ntpdate pool.ntp.org