Projekti

Yleinen

Profile

Konfiguraatiotiedostojen varmistukset

Koha-Suomen Koha-installaatiot ovat periaatteessa toistensa klooneja, joten niiden varmuuskopioimiseksi periaatteessa riittää pelkkien kimppakohtaisten konfiguraatiotiedostojen kopiointi talteen. Mikäli jostain syystä ajaudumme tilanteeseen, jossa on tarpeen saada aikaiseksi uusi Koha-installaatio jollekkin kimpalle, voidaan periaatteessa mikä tahansa Koha-kontti kloonata ja sen jälkeen sijoittaa siihen paikalleen kimppakohtaiset konfiguraatiotiedostot. Varmastikin vaatii hieman säätämistä, mutta periaatteessa koko kontin varmistaminen ei ole tarpeen. Kopioimalla talteen pelkästään konfiguraatiotiedostot "varmuuskopiot" voidaan tehdä hyvin nopeasti lennossa ja ilman koko kontin varmuuskopioinnin aiheuttamaa käyttökatkoa.

Varmistus

Konfiguraatietoedostojen varmistus tehdään kimppojen palvelimilla ajastetusti joka päivä klo 20.00 hostin root-käyttäjän crontabista:

00 20 * * * /usr/local/sbin/sync_configs.sh

sync_configs.sh tekee kryptattuja .tar.gz paketteja, joiden tarkentimena lummestaging-palvelimella on .tgc. Pakettien kryptaukseen käytetään ccryptiä, joka salaa paketit AES256-salauksella. Kaikista palvelimella olevista lxc-konteista tehdään konfiguraatiotiedostovarmuuskopio, joka sisältää:

  • kontin config -tiedoston
  • kontin iptables -skriptin
  • rootfs/etc -hakemiston
  • rootfs/home/koha/koha-dev/etc -hakemiston, jos sellainen on olemassa

Paketit sijoitetaan rsyncillä ssh:n yli lummestaging-palvelimen 'configs' käyttäjän kotihakemistoon ja niitä säilytetään 14 vuorokautta. Pakettien siivous on ajastettuna lummestaging-palvelimen root-käyttäjän crontabissa:

00 10 * * * find /home/configs/ -name '*.tgc' -mtime +14 -exec rm {} \;

Konfiguraatio

Varmistuksen konfiguraatiotiedosto on kunkin kimpan Koha-palvelimen /etc hakemistossa ja se on nimeltään sync_configs.conf. Tiedoston ensimmäisellä rivillä on salaukseen käytettävä avain ja toisella rivillä varmuuskopion tunniste (kimpan nimi), esimerkiksi:

TämäOnFeikkiavain,JokaEiTeeMitään.
kinppa

Tiedoston oikeuksien pitää olla rajattu siten että vain omistajalla (root) on tiedostoon luku- ja kirjoitusoikeus (chmod 600 /etc/sync_configs.conf).

Palautus

Mikäli konfiguraatiotiedostoja on tarpeen palauttaa varmuuskopioista, se voidaan tehdä seuraavasti:

  • siirrä haluamasi paketti oikealle palvelimelle esimerkiksi scp:llä tai sftp:llä
  • pura paketin salaus ccdecrypt [paketin_nimi.tgc]
  • pura paketti tar xzvf [paketin_nimi.tgc]

Paketti puretaan sen hakemiston alle johon sijoitit paketin. Siirrä tarvittavat tiedostot varmuuskopiosta oikeille paikoilleen.

sync_configs.sh -skripti ei ole githubissa, koska se on ajatus ajaa host-koneen puolelta eikä Koha-kontin sisältä. Sillä tavalla talteen saadaan myös konttien konfiguraatiotiedostot, NAT-säännöt ym.

sync_configs.sh

#!/bin/sh
# This script will sync configuration files in local Koha installations to lummestaging. 

# You will need to create /etc/sync_configs.conf, with two lines: first line has the encryption/decryption key
# and the second line has the "system identifier" for the source system of the configuration. To keep the key safe, 
# the file needs to be mode 600 (chmod 600 /etc/sync_configs.conf).

# Put this script in root-crontab in Koha-containers:

# 00 21 * * * /usr/local/sbin/sync_configs.sh

timestampme() { date "+[%Y-%m-%d %H:%M:%S]" ; }

test "$(whoami)" != "root" && echo "You are not root." && exit 1

# Check that we have the required software installed

if ! which ccrypt > /dev/null 2>&1; then
    echo "$(timestampme) Missing ccrypt, apt install ccrypt." 
    exit 1
fi

if ! which rsync > /dev/null 2>&1; then
    echo "$(timestampme) Missing rsync, apt install rsync." 
    exit 1
fi

# Check the configuration

test ! -e /etc/sync_configs.conf && echo "$(timestampme) No /etc/sync_configs.conf." && exit 1
test $(wc -l /etc/sync_configs.conf | cut -f 1 -d ' ') -ne 2 && echo "$(timestampme) Faulty /etc/sync_configs.conf. Two lines are required: key and system identifier." && exit 1
test $(stat --printf="%a" /etc/sync_configs.conf) -ne 600 && echo "$(timestampme) Wrong permissions on /etc/sync_configs.conf, needs to be mode 600. Please fix." && exit 1

# Everything good, proceed with backup

prefix="$(tail -n 1 /etc/sync_configs.conf)" 

umask 077
timestamp=$(date +%Y-%m-%d)

IFS='
'
for i in $(ls -1 /var/lib/lxc); do
    mytemp=$(mktemp)
    echo "$(timestampme) Creating configuration backup $prefix-$i-$timestamp.tgc..." 
    tar czf $mytemp -C /var/lib/lxc/$i config iptables rootfs/etc rootfs/home/koha/koha-dev/etc 2> /dev/null 
    ccrypt -k /etc/sync_configs.conf $mytemp 
    rsync $mytemp.cpt configs@195.148.220.32:$prefix-$i-$timestamp.tgc
    rm $mytemp.cpt
done

echo "$(timestampme) Done."