Stari korisnici, novi poslužitelj i Maildir

Debian LogoZastarjele datoteke i nepotrebni nagomilani paketi uobičajena su posljedica dugogodišnjih nadogradnji. S druge strane, suvremeni poslužitelji, hardverski jaki i s visokim stupnjem pouzdanosti nalažu novu praksu: umjesto dosadašnjih nadogradnji, obavlja se instalacija čistog poslužitelja, a korisnici, njihove datoteke i mailovi se migriraju.

Sama instalacija novog poslužitelja nije složen postupak. Korištenjem opcije network install izbjegavamo instalaciju nepotrebnih paketa, a skidanje ISO slike i pokretanje instalacije su trivijalni. Naglasit ćemo dvije stvari. Prva, za FQDN novog poslužitelja trebamo postaviti isto ime kao što je na starom poslužitelju uz različitu IP adresu, ali bez izmjena u DNS-u. Kada je postupak okončan, jednostavno se za IP adresu postavlja ona koja se nalazi na starom poslužitelju te novi poslužitelj nastavlja s radom tamo gdje je stari stao. U postupku konfiguracije novi naglasak je i na promjeni putanje na kojoj se nalaze mailovi, i to iz: /var/mail/korisnik u /home/korisnik/Maildir. Pritom je važno pripaziti na veličinu particije /home. O ovome će biti riječi u nastavku.

Dodavanjem CARNetovog repozitorija instaliramo već podešene i dobro nam poznate CARNetove pakete. Tako je nakon dovršetka instalacije potrebno u datoteci: /etc/apt/sources.list za aktualnu verziju Debiana dodati sljedeće unose:

deb http://ftp.hr.debian.org/debian jessie main contrib non-free
deb http://security.debian.org/ jessie/updates main contrib non-free
deb http://ftp.carnet.hr/carnet-debian carnet-jessie main

Time možemo nastaviti instalaciju potrebnih paketa poput postfixa, dovecota i apacheja. Naravno, pričamo o -cn verzijama paketa. Također, potrebno je pobrinuti se i za certifikat za servise na poslužitelju, kako bi svi servisi nastavili rad na siguran način.

Sljedeća stvar koju radimo jest kreiranje korisnika. Datoteke koje nam trebaju su: /etc/passwd, /etc/shadow i /etc/group. Dobrom starom opcijom copy/paste iz svake stare navedene datoteke u svaku novu "kreiramo" stare korisnike na novom poslužitelju, pritom pazeći na korisnike i grupe s uid-om manjim od 1000. Njih ne diramo jer se radi o sistemskim korisnicima i grupama. Za lakše snalaženje u navedenim datotekama možemo koristiti prikaz sortiran po uid-u, primjerice:

sort -n -t ':' -k3 /etc/passwd

Korisnike koje ne želimo migrirati jednostavno nećemo kopirati u navedene datoteke. Također, dobro je provjeriti koristimo li datoteke: /etc/gshadow, /etc/subgid i /etc/subuid. Njih, naime, treba urediti na isti način.

Time je završena priprema korisnika i prelazimo na migraciju korisničkih podataka. Podrazumijevana lokacija korisničkih podataka je unutar direktorija /home/, a mailovi se nalaze na putanji  /var/mail/. Koristit ćemo rsync, svestrani alat za kopiranje datoteka, kako lokalno, tako i udaljeno, uz mogućnost zadržavanja vlasništva dozvola nad datotekama. Međutim, kako moramo kopirati podatke svih korisnika, to moramo napraviti kao korisnik root koji jedini ima pristup svim datotekama. Rsync koristi ssh za prijenos podataka, što znači da moramo napraviti iznimku i prekršiti pravilo koje kaže da je ssh pristup za korisnika root zabranjen. Opcija koja nam treba nalazi se u datoteci /etc/ssh/sshd_config, a redak koji će nam omogućiti ssh pristup za korisnika root treba izgledati ovako:

PermitRootLogin yes

Naravno, moramo biti sigurni da smo korisniku root postavili "jaku" lozinku. Ovu vrijednost ćemo na kraju postupka vratiti na "no" ili "without-password" koja je pretpostavljena. Naravno, nakon izmjene potrebno je napraviti restart servisa kako bismo uključili promjene.

Sjećate se korisnika koje smo odlučili izostaviti na novom poslužitelju? Kako bismo izbjegli kopiranje njihovih datoteka, popis tih korisnika treba navesti u zaseboj datoteci koju ćemo nazvati iskljuci_home.txt, primjerice:

/mmatic
/aantic
/pperic

Sama naredba za prebacivanje korisničkih podataka jest sljedeća:

stari_stroj#rsync -avz --delete --progress --exclude-from='/home/iskljuci_home.txt' \
/home/ root@ip_adresa:/home/

Naredbu ćemo izvršiti na starom poslužitelju, a parametar ip_adresa se odnosi na adresu novog poslužitelja. Ukratko, naredba će sve datoteke s putanje /home/ sa starog poslužitelja (osim onih navedenih u datoteci iskljuci_home.txt) prebaciti na isto mjesto na novom poslužitelju. Navedene opcije imaju sljedeća značenja:

-avz pokreće rsync u arhivskom modu, komprimira datoteke i poveća "verbosity". Sama opcija -a uključuje opcije -rlptgoD (više o tome, naravno, u man stranici alata)
--delete na odredištu briše eventualne datoteke koje ne postoje na izvorištu
--progress prikazuje proces na ekranu
--exclude-from isključuje datoteke na putanjama navedenim u datoteci /home/iskljuci-home.txt

Kao što smo rekli, mailovi korisnika se nalaze u direktoriju /var/mail/ pa ćemo njih prebaciti pomoću slične naredbe:

stari_stroj#rsync -avz --delete --progress --exclude-from='/var/iskljuci_var.txt' \
/var/mail/ root@ip_adresa:/var/mail/

Vidimo novu datoteku, /var/iskljuci_var.txt u kojoj su sadržani korisnici čije mailove ne želimo prebaciti. To su, ustvari, oni isti korisnici koji su navedeni u prvoj txt datoteci, ali bez početnog znaka "/". Primjerice:

mmatic
aantic
pperic

Nakon izvršenja obiju naredbi (što može i potrajati) slijedi spajanje na poslužitelj te provjera urednosti inboxa.

Odlučili smo uvesti dvije promjene: prva (vidljiva iz naslova) je promjena formata mailova iz postojećeg mboxa u Maildir. Mbox podrazumijeva da je inbox jedna datoteka koja (uglavnom) samo raste, a Maildir "razbija" inbox na onoliko datoteka koliko ima mailova. Time će eventualni gubitak jedne datoteke izazvati gubitak samo jednog maila, dok greška u inboxu formata mbox uzrokuje greške u cijelom inboxu. Problem jest što će neke stvari prestati raditi (poput prikaza "Mail last read on ..." naredbe finger) jer je mbox ukorijenjen u povijest Unixa, ali prednosti brzine i pouzdanosti prema IMAP-u su tolike da se malo truda isplati - barem tako piše na Debianovim wiki stranicama. Kako je spomenuto na početku, potrebno je pripaziti na veličinu particije /home, jer se formatu Maildir inbox premješta s putanje /var/mail/ na putanju /home/korisnik/Maildir.

A druga promjena jest zamjena nekima omražene "vjeverice" aplikacijom Roundcube. Naravno, i to je zahtijevalo malo dodatnog truda poput pisanja kratkih uputa kako prebaciti postojeći adresar iz Squirellmaila u Roundcube. Međutim, daleko ugodnije sučelje je kod većine korisnika naviklih na Squirrelmail izazvalo oduševljenje pa se trud isplatio.

Ideja je nekoliko puta tijekom par dana pokrenuti naredbe rsync za prebacivanje korisničkih datoteka i mailova. Na taj način ćemo smanjiti downtime kad novi poslužitelj budemo puštali u produkciju, Jednom kad odlučimo napraviti "zamjenu" poslužitelja, na starom poslužitelju prvo trebamo isključiti postfix i dovecot kako bismo u potpunosti zaustavili isporuku mailova te zadnji put zadnji put pokrenuti navedene dvije naredbe rsync. Nakon što smo završili s prebacivanjem korisničkih datoteka i mailova, slijedi nam mailman i njegova arhiva:

stari_stroj# rsync -azv --delete --progress /etc/mailman/ root@ip_adresa:/etc/mailman
stari_stroj# rsync -azv --delete --progress /var/lib/mailman/ root@ip_adresa:/var/lib/mailman

Baze podataka unutar MySQL-a ćemo prvo izvesti pomoću naredbe mysqldump, zatim prebaciti na novi poslužitelj i tamo opet uvesti:

stari_stroj# mysqldump –u root –p database_name > /var/backups/backup_database_name.sql
stari_stroj# rsync –avz –delete –progress /var/backups/backup_database_name.sql \
root@ip_address:/var/backups
novi_stroj# mysqldump –u root –p database_name < /var/backups/backup_database_name.sql

Još je ostalo promijeniti IP adrese na način da ćemo na starom poslužitelju postaviti neku novu adresu, a na novom ćemo postaviti onu koja je bila na starom. Datoteke koje nam trebaju su /etc/network/interfaces i /etc/hosts. Kako nismo mijenjali DNS zapise, a ime poslužitelja je (ostalo) isto, sustav će nastaviti raditi gdje je stari poslužitelj stao. I ne zaboravite onemogućiti ssh pristup korisniku root na novom poslužitelju.

Vratimo se na format Maildir. Stari poslužitelj je koristio format mbox, a on je pretpostavljen i na novom Debianu (Jessie, u mom slučaju) pa se za prebacivanje u Maildir može iskoristiti paket mb2md koji je dostupan na standardnom repozitoriju. Paket sadrži skriptu mb2md.pl koja zaista omogućava finu kontrolu nad procesom konverzije, a trebala bi raditi na svim *nix operativnim sustavima. Međutim, paket pretpostavlja da promjenu formata napravi svaki korisnik za sebe pa ako se radi o poslužitelju s velikim brojem korisnika nenaviklih na rad u konzoli, njegovo je korištenje problematično. Kako bismo stekli malo više kontrole nad procesom promjene mail formata, a i pokrenuli proces kao svaki od korisnika na poslužitelju, kreirali smo vlastitu bash skriptu koja ne koristi navedeni paket nego samu skriptu sadržanu u paketu.

#!/bin/bash
for korisnik in $(cat korisnici.txt);
do
{
echo $(date)
echo "starting user "$korisnik
cd /home/$korisnik
echo "su - " $korisnik " -c '/mb2md-3.20.pl -s . -R'"
su - $korisnik -c '/mb2md-3.20.pl -s . -R'
echo "su - " $korisnik " -c '/mb2md-3.20.pl -s /var/mail/$korisnik'"
su - $korisnik -c '/mb2md-3.20.pl -s /var/mail/'$korisnik
echo "su - " $korisnik " -c ' cp .subscriptions Maildir/subscriptions'"
su - $korisnik -c 'cp .subscriptions Maildir/subscriptions'
echo "mv /var/mail/"$korisnik " /var/mail/old_"$korisnik
mv /var/mail/$korisnik /var/mail/old_$korisnik
echo "end user "$korisnik
echo " "
} >> /root/scripts/skripta.log 2>&1
done

Ta skripta koristi tekstualni popis korisnika (korisnici.txt) kojima će se promijeniti format maila, a podrazumijeva da korisnici imaju ljusku (shell), tj. da im nije zabranjen ssh pristup pomoću opcije /bin/false u datoteci /etc/passwd. Skriptu pokreće korisnik root kao standardnu skriptu, bez parametara. Redak 9 rekurzivno opcijom -R iz svakog poddirektorija uzima jednu mbox datoteku s lokacije . (što je home direktorij korisnika) i pretvara je u format Maildir. Redak 11 radi isto, ali za mbox na lokaciji /var/mail/, dok idući redak na novu lokaciju kopira popis eventualnih direktorija koje je korisnik kreirao unutar svog inboxa. Na kraju, da znamo kojeg smo korisnika "riješili", imenu inboxa na lokaciji /var/mail/ dodajemo prefiks old. Retci koji imaju ključnu riječ echo služe isključivo kao dio loga koji se zapisuje u datoteku skripta.log, kako bismo lakše riješili eventualne probleme. Podrazumijevano odredište za konverziju je ~/Maildir, a može se promijeniti opcijom -d. Sama konverzija ide vrlo brzo, mbox s cca 1500 mailova u našem slučaju promijeni format za otprilike 5 sekundi, a brzina, naravno, ovisi o hardveru poslužitelja

Za ispravno funkcioniranje formata Maildir, osim promjena navedenih na Debianovoj wiki stranici, potrebno je promijeniti konfiguraciju postfixa na način da se zada novi format maila u datoteci /etc/postfix/main.cf:

home_mailbox = Maildir/

Također, i dovecotu trebati dati do znanja za postojanje novog formata, a to se postavlja u datoteci: /etc/dovecot/conf.d/10-mail.conf:

mail_location = maildir:~/Maildir

Ukoliko na starom poslužitelju koristite uslugu sys.backup, za nastavak njezinog rada potrebno je pratiti upute navedene na stranici usluge. A ako se odlučite zadržati Squirellmail, potrebno je rsyncom prebaciti korisničke postavke i adresare koji se nalaze na putanji /var/lib/squirrelmail/data. Nakon što korisnici provjere svoje inboxe, datoteke s prefiksom old mogu se obrisati.

Izlaskom nove CARNetove verzije Debiana uvijek je dobro zapitati se je li nadogradnja pravi izbor. Novom instalacijom nove distribucije te ručnom instalacijom i konfiguracijom servisa dobije se "čisti" poslužitelj bez nepotrebnih paketa, zaostalih datoteka, krivih simboličkih linkova i ostalog otpada koje ostane nakon što instalacija nekog paketa pukne. A prebacivanje korisnika, njihovih podataka i mailova, iako uzima nešto vremena, nije toliko složeno kako se na prvi pogled čini. Uz pravu pripremu, downtime je uistinu minimalan.

Kuharice: 
Kategorije: 
Vote: 
5
Vaša ocjena: Nema Average: 5 (1 vote)