SmartOS chyba při spouštění /smartdc/bin/sdc-lastcomm cronem

Pokud už vás nebaví po přihlášení do SmartOS global zóny hláška You have new mail a vidíte ve /var/mail/root chybu:

find: stat() error ./20150420000000.not_terminated.host: No such file or directory

má to snadnou nápravu. Bude ale potřeba upravit soubor /smartdc/bin/sdc-lastcomm. Abych si to zjednodušil, vytvořil jsem patch:

--- /smartdc/bin/sdc-lastcomm	Fri May 30 03:16:17 2014
+++ /smartdc/bin/sdc-lastcomm	Tue Apr 21 11:23:16 2015
@@ -48,10 +48,19 @@
 		echo "-R is not valid with -d"
 		exit 1
 	fi
+	MAX_SLEEP=3
+	cd "$DIR" || exit 1
+	# Save the current audit log filename
+	AUDIT_LOG=`find . -name "*.not_terminated.*"`
 	# Rotate and trim the audit logs
 	audit -n
-	cd "$DIR" || exit 1
-	find . -type f -mtime +$DAYS -print0 2>/dev/null | xargs -0 rm -f
+	# Wait until old log is closed or MAX_SLEEP seconds
+	while [[ -f $AUDIT_LOG && $MAX_SLEEP ]]; do
+		MAX_SLEEP=$((MAX_SLEEP - 1))
+		sleep 1
+	done
+	# Find and delete $DAYS old files
+	find . -type f -mtime +$DAYS -print0 2>/dev/null | xargs -0 rm -f
 	exit 0
 fi
 

Patch nejlépe provede takto:

$ curl --insecure -s https://gist.githubusercontent.com/foxycode/f12e9bc4f7af24436e90/raw/22ff6087002c45893e35dea09aa55809ce2069aa/sdc-lastcomm.patch | patch /smartdc/bin/sdc-lastcomm

Více info v Github repozitáři SmartOS

Update: 15.10.2015 upraveno pro verzi 20151015T063628Z

Sloučení commitů do jednoho pomocí git rebase

Slučování commitů v GITu se nazývá squashing.

Sloučení commitů se pak provede příkazem rebase kde 4 je počet commitů včetně posledního:

git rebase -i HEAD~4

Slovo pick se pak krom jednoho commitu zamění za squash:

pick 01d1124 Adding license
squash 6340aaa Moving license into its own file
squash ebfd367 Jekyll has become self-aware.
squash 30e0ccb Changed the tagline in the binary, too.

Takto rebasenutý repozitář je pak u pushnutých commitů potřeba do remotu odeslat pomocí:

git push origin +master

Přidávání PPA na Ubuntu 14.04

Pokud nemůžete na Ubuntu 14.04 najít příkaz add-apt-repository a nepomůže v tom ani instalace balíčku python3-software-properties (ve starší verzi Ubuntu python-software-properties), vězte že ve verzi 14.04 je tento příkaz v jiném balíku. Je potřeba nainstalovat balík software-properties-common.

Nastavení DKIM klíče pro Google Apps (Gmail pro firmy)

Seznam.cz oznámil od 1.4.2015 zpřísnění podmínek pro marketéry využívající hromadný e-mailing. Pokud používáte pro firemní poštu Gmail jako já, budete se s tím muset dříve nebo později poprat. Zde uvádím návod, jak DKIM klíč nastavit pro Google Apps.

Nejprve je potřeba se přihlásit do administrace Google Apps:

Google Apps Login

Poté proklikneme na Aplikace:

Google Apps Aplikace

Pokračujeme na Google Apps:

Google Apps Apps

Vybereme Gmail:

Google Apps Gmail Nastavení

Klikneme na Ověřit e-mail:

Google Apps Ověřit email

Klikneme na Vygenerovat nový záznam:

Google Apps Generovat DKIM klíč

Ponecháme předvyplněný selector google a klikneme Generovat:

Google Apps DKIM Selector

Vygenerovaný klíč je poté potřeba přidat do DNS jako TXT záznam:

Google Apps DKIM klíč

Po přidání záznamu do DNS už jen klikneme na Spustit ověření. Je možné, že bude Google chtít nějaký čas počkat kvůli aktualizaci DNS.

Zda máte klíč v DNS nastaven správně si můžete ověřit zde.

Jak přejmenovat soubor, aby tak po upgradu balíčku zůstal

Asi už vás někdy napadlo nějaký nešikovný název programu v linuxu přejmenovat. To ale obvykle přináší jeden malý problém. Je potřeba to udělat po každém upgradu onoho programu. Distribuce založené na Debianu (tedy i Ubuntu) na to mají naštěstí fígl. Program dpkg-divert vám dovolí přejmenovat nebo nalinkovat soubor jinam a ten bude po upgradu balíku takto udržován.

Příkaz pak vypadá např. takto:

dpkg-divert --local --divert /usr/bin/ack --rename --add /usr/bin/ack-grep
  • Parametr –local zajistí, že přejmenování zůstane pro všechny verze balíčku
  • Parametr –divert říká, jak se bude program jmenovat
  • Parametr –rename zajistí přejmenování místo nalinkování souboru
  • Parametr –add říká, který soubor vlastně přejmenováváme

SmartOS, route a IP adresy od OVH

Mám nyní u skvělého dodavatele serverů OVH jeden server, na kterém jsem chtěl vytvořit několik VPS. Nechal jsem si k serveru přidělit dodatečné IP adresy, ale ouha, po konfiguraci zóna nemá síť. Jak z toho ven?

Problém je v tom, že brána pro dodatečné IP je v jiném subnetu než přidělené IP adresy. Musíme tedy zóně nejprve dát vědět, kudy se do toho subnetu dostane. To provedeme spuštěním následujícího příkazu uvnitř VPS:

route -p add XXX.XXX.XXX.0/24 YYY.YYY.YYY.YYY -interface -ifp net0

XXX.XXX.XXX jsou první 3 octety IP adresy global zóny (fyzického serveru). YYY.YYY.YYY.YYY je dodatečná IP, nastavená VPS serveru.

Protože VPS při startu bránu nenašel, bude potřeba ručně přidat ještě tu:

route -p add default XXX.XXX.XXX.254

XXX.XXX.XXX jsou opět první 3 octety IP adresy global zóny. OVH jako bránu používá vždy poslední adresu z daného rozsahu, tedy 254.

Parametr -p (persist) v příkazech říká, že se má nastavení uložit. Nesmaže se vám tedy po restartu serveru.

Samotné nastavení se ukládá do souboru /etc/inet/static_routes

Ekvivalent pro Linux (Ubuntu):

route add -net XXX.XXX.XXX.0/24 gw YYY.YYY.YYY.YYY dev eth0
route add default gw XXX.XXX.XXX.254

SmartOS, PuTTY a klávesy HOME, END a DEL

Pokud vás také zdržuje, že ve SmartOS nefungují na konzoli klávesy HOME, END a DELETE, zde je způsob, jak to napravit.

V domovském adresáři vytvoříme soubor .inputrc s následujícím obsahem:

"\e[3~": delete-char
"\e[1~": beginning-of-line
"\e[4~": end-of-line

Díky tomuto souboru bude bash vědět, jakou funkci má pro dané klávesy použít. Změny se projeví až po opětovném přihlášení.

Co ale dělat v případě globální zóny, kdy se tento soubor po restartu ztratí? Vytvoříme si pro něj SMF službu!

Nejprve soubor .inputrc nakopírujte do adresáře /opt/custom. Pokud tento adresář nemáte vytvořen, tak jej vytvořte.

Poté vytvořte soubor /opt/custom/smf/inputrc_link.xml s následujícím obsahem:




    
        
        
        
            
        
        
            
        
        
        
        
        
            
            
        
        
        
        
    

SmartOS po restartu automaticky načítá XML soubory z tohoto adresáře, službu nám naimportuje a vyrobí link.

Malý tip na závěr: Ve SmartOS zónách je stejný problém, ačkoliv stačí jen nakopírovat soubor .inputrc do adresáře uživatele, není potřeba SMF služba. Dělat to pro každou zónu je ale otrava. Můžeme si to zjednudušit tím, že soubor nakopírujeme do šablony zóny stáhnuté přes imgadm. Např. takto pro uživatele root:

cp /root/.inputrc /zones//root/root/

Nastavení NTP v globální zóně SmartOS

V nedávné době se na internetu začala hojně zneužívat chyba v NTP serveru, který je na mnoha serverech defaultně povolen. SmartOS v tomto nebyl vyjímkou. V aktuální verzi (20140404T001635Z) je již chyba v konfiguraci NTP na SmartOS opravena, nejlepším řešením je tedy upgrade SmartOS. Pro ty, co si ale chtějí do NTP nastavit české servery tu mám krátký návod, jak ntp.conf přetížit.

Tento konfigurační soubor ntp.conf uložíme do souboru /usbkey/config.inc/ntp.conf

driftfile /var/ntp/ntp.drift
logfile /var/log/ntp.log

# by default act only as a basic NTP client
restrict -4 default ignore
restrict -6 default ignore

# allow NTP messages from the loopback address, useful for debugging
restrict 127.0.0.1
restrict ::1

# allow servers we are synchronizing with:
restrict -4 tik.cesnet.cz nomodify nopeer
restrict -4 tak.cesnet.cz nomodify nopeer
restrict -6 tik.cesnet.cz nomodify nopeer
restrict -6 tak.cesnet.cz nomodify nopeer

# server(s) we time sync to
server tik.cesnet.cz
server tak.cesnet.cz

Pokud složku config.inc ještě nemáte vytvořenou, tak ji vytvořte.

Config poté aktivujeme přidáním následujícího řádku na konec souboru /usbkey/config

ntp_conf_file=ntp.conf

Změny se projeví až po restartu stroje. Eventuelně můžete config nakopírovat do souboru /etc/inet/ntp.conf a restartovat NTP příkazem:

svcadm restart ntp