Docker Image for building AUR packages

  1. Installation und Konfiguration von Docker

    Link: ArchLinux Wiki

  2. Arch Base-Image ziehen

    docker pull base/archlinux
    
  3. Image starten

    docker run -t -i base/archlinux /bin/bash
    

    und den Container updaten (Key/Id kopieren für Image-Erzeugung – das ist das Ding hinter dem root@)

    pacman -Syy
    pacman -S archlinux-keyring
    pacman -Su
    exit
    

    um im Anschluss das neue Image zu erzeugen (d2aa60a61cd2 war meine Id, tucker/archbase ist mein gewählter Name):

    docker commit -m "Updated base image" -a "Micha Alt" d2aa60a61cd2 tucker/archbase
    
  4. Image in ein Devel-Image umwandeln (Devel-Pakete installieren plus Build-User einrichten)

    docker run -t -i tucker/archbase
    

    Im Container (Id wieder kopieren):

    pacman-db-upgrade
    pacman -S base-devel
    pacman -S git namcap pkgbuild-introspection
    useradd --create-home --comment "Arch Build User" build
    exit
    

    Und den Container bzw. die Änderungen wieder als Image committen:

    docker commit eb4e8295c2fc tucker/archbase
    
  5. Workflow zum Test-Build eigener Pakete (es sollte ein Verzeichnis existieren, dass das entsprechende PKGBUILD plus event. weitere nötige Dateien enthält):

    docker run -i -t -v >>PKGBUILD-Path<<:/package tucker/archbase
    

    Im Container:

    # Container upgraden
    pacman -Syu
    
    # Eventuelle Dependencies installieren:
    pacman -S npm
    
    su - build
    cd /package
    makepkg --force
    mkaurball
    

Von Zeit zu Zeit sollte das Image aktualisiert werden, damit der initiale Container-Upgrade im Schritt 5 nicht zu aufwendig
wird. Dazu das Image starten, den Container upgraden und die Änderungen committen.

In einem weiteren Artikel werde ich ein Dockerfile erstellen, dass den Package-Build automatisiert.

Git Workflow on Gnome

Git in der Version 1.8 bringt Unterstützung für den Gnome Keyring mit. Dieser hilft bei allen https-Repositories. Da es ähnliches auch für Windows gibt (Link: Windows Credential Store for Git) clone ich fast alle Repositories mittlerweile über die https-Url. Das erspart einiges an Key-Management.

Unter Linux muss der credential helper allerdings erst distributions-abhängig compiliert werden. Hier die notwendigen Schritte unter ArchLinux:

$ cd /usr/share/git/credential/gnome-keyring
$ sudo make
$ git config --global credential.helper /usr/share/git/credential/gnome-keyring/git-credential-gnome-keyring

Fundstelle mit weiteren Anleitungen für andere Distributionen: http://stackoverflow.com/a/13390889

Git Workflow for Web Development

Ziel: automatischer Sync zwischen Entwicklungs-Repository, GitHub-Mirror und Web-Server.

  1. Bare-Repository auf einem Server

    $ mkdir mywebsite.git
    $ cd mywebsite.git
    $ git init --bare
    
  2. SSH-Key Setup auf dem Server

    ssh-keygen -f ~/.ssh/some_repo
    

    Passwort leer lassen. Dann an die ~/.ssh/config folgendes anhängen:

    Host some-repo-github.com
      IdentityFile /path/to/user-home/.ssh/some-repo
      HostName github.com
      User git
    
  3. Repository-only DeployKey auf GitHub einrichten

    In den Einstellungen/Settings des Mirror-Repositories den oben erzeugten Key als DeployKey konfigurieren.

  4. GitHub-Mirror als Remote registrieren

    git remote add --mirror github some-repo-github.com:github-user/some_repo.git
    

    GitHub-User und Repo-Adresse muss natürlich angepasst werden.

  5. Initialer Fetch

    Falls das GitHub-Repo schon existierte, einen initialen Fetch ausführen:

    git fetch github
    
  6. GitHub Push-Hook

    Datei anlegen (ausführbar!) hooks/post-receive mit folgendem Inhalt (plus She-Bang):

    git push --quiet github &
    
  7. WebSite Update-Hook

    In der gleichen Datei (falls gewünscht):

    GIT_WORK_TREE=/path/to/webroot/of/mywebsite git checkout -f
    

Als zentrales Repo dient nun das im ersten Schritt angelegte (Bare) Repository. Pushs auf dieses
Repo updaten den GitHub-Mirror und die WebSite selbst.

Verweise:

Mirror your Repository on GitHub

Deploy WebSite changes via git