cron-apt

Im więcej mamy pod opieką serwerów bądź też nie logujemy sie na nie codziennie warto wiedzieć kiedy pojawią się jakieś aktualizacje. Tym bardziej gdy (jak ja) nie jesteśmy zwolennikami automatycznych aktualizacji.
Z pomocą przychodzi cron-apt, aplikacja która jak nazwa sugeruje wg ustawień crona sprawdza bądź aktualizuje nasz system, do tego dochodzi opcja powiadomień mailowych.

Instalacja:

apt install cron-apt

Konfiguracja (najprostrza – powiadomienie na mail o dostępnych aktualizacjach):

cat /etc/cron-apt/config
# Configuration for cron-apt. For further information about the possible
# configuration settings see /usr/share/doc/cron-apt/README.gz.
MAILTO="user@mail.com"
MAILON="upgrade"

Kiedy odpalamy:

cat /etc/cron.d/cron-apt 
#
# Regular cron jobs for the cron-apt package
#
# Every night at 4 o'clock.
0 4 * * * root test -x /usr/sbin/cron-apt && /usr/sbin/cron-apt
# Every hour.
# 0 * * * * root test -x /usr/sbin/cron-apt && /usr/sbin/cron-apt /etc/cron-apt/config2
# Every five minutes.
# */5 * * * * root test -x /usr/sbin/cron-apt && /usr/sbin/cron-apt /etc/cron-apt/config2

Inne opcje:

/usr/share/doc/cron-apt/README.gz

 

Munin v2

Pisałem już kiedyś jak zainstalować munina, teraz nieco bardziej rozbudowana wersja, z kilkoma hostami i nieco odświeżonym interfejsem graficznym.

Jeden z hostów będzie traktowany jako master (przypadek gdy hosty nie są w tej samej sieci), ten który wystawia statystyki webowo. Instalacja jak poprzednio:

apt install apache2 libcgi-fast-perl libapache2-mod-fcgid munin munin-node munin-plugins-extra 

a2enmod fcgid

W /etc/munin/munin.conf konfigurujemy co nam potrzeba, głównie:

htmldir /var/www/munin/ //w zależności jak mamy ustawione apache


[server1.example.com]
address 127.0.0.1
use_node_name yes

[server2.example.com]
address x.x.x.x //zewnętrzne ip drugiego hosta, można powtarzać z kolejnymi
use_node_name yes
cd /etc/apache2/conf-enabled/
ln -s /etc/munin/apache24.conf munin.conf
systemctl restart apache2

W /etc/munin/apache24.conf ustawiamy:

Alias /munin /var/www/munin
<Directory /var/www/munin>
 # Require local
 Require all granted
 Options FollowSymLinks SymLinksIfOwnerMatch
 Options None
</Directory>

ScriptAlias /munin-cgi/munin-cgi-graph /usr/lib/munin/cgi/munin-cgi-graph
<Location /munin-cgi/munin-cgi-graph>
 # Require local
 Require all granted
 Options FollowSymLinks SymLinksIfOwnerMatch
 <IfModule mod_fcgid.c>
 SetHandler fcgid-script
 </IfModule>
 <IfModule !mod_fcgid.c>
 SetHandler cgi-script
 </IfModule>
</Location>

Webowy interfejs powienien już działać, wyświetlać statystyki z mastera.

Teraz na każdym kolejnym nodzie:

apt install munin-node

W etc/munin/munin-node.conf ustawiasz:

allow ^123\.456\.78\.100$ //ip mastera


systemctl restart munin-node

W firewallu otwieramy port 4949:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 4949 -j ACCEPT

(na masterze konfigurację ustawiliśmy wcześniej), po kilku minutach host powinien pojawić się w interfejsie webowym.

W przypadku gdy coś nie działa polecam popatrzeć w log:

tail -f /var/log/munin/*

Zazwyczaj nie może się połączyć z hostem, trzeba więc wtedy posprawdzać firewalle, telnet powinien was ładnie przywitać, z mastera:

telnet ipnoda 4949

Jeżeli mamy jakąś maszynkę bez stałego ip ale np router już go ma to spokojnie można po prostu przekierować port 4949 na routerze do hosta (np raspberry jak u mnie)

Webowy interfejs:
cd /tmp

git clone https://github.com/munin-monitoring/contrib.git

cd /etc/munin

cp -rb /opt/contrib/templates/munstrap/templates .

cp -rb /opt/contrib/templates/munstrap/static .

rm -rf /var/www/munin/*

Po 5 minutach powinno wyglądać mniej więcej tak:

BOINC

Większość z naszych maszyn podczas gdy na nich nie pracujemy marnuje się (o ile są włączone oczywiście ;)) dlaczego by też nie wykorzystać ich w imię nauki.

W BOINC możemy wybrać sobie dowolny projekt dla którego udostępnimy swoją moc obliczeniową, wystarczy zainstalować:

aptitude install boinc-client

Graficznie resztę można wyklikać poprzez:

aptitude install boinc-manager

Gdy jednak maszyna nie posiada serwera graficznego możemy się posiłkować konfiguracją manualną (boinc-manager posiada opcję połączenia remote aczkolwiek nie mogłem w ten sposób dodać żadnego projektu, świetnie się jednak sprawdza później do podglądu jak nam idzie).

Tak więc wybieramy jakiś projekt, rejestrujemy konto na stronie i konfiguruejmy klienta:

boinccmd --lookup_account projekt mail haslo

np:

boinccmd --lookup_account http://setiathome.berkeley.edumail@mail haslo

pojawi się nasz kod, dodajemy go:

boinccmd --project_attach projekt kod

np:

boinccmd --project_attach http://setiathome.berkeley.edu kod

Aby móc połączyć się zdalnie w pliku /var/lib/boinc-client/remote_hosts.cfg podajemy ip a w /var/lib/boinc-client//var/lib/boinc-client hasło.

Na koniec w iptables otwieramy port 31416 i łączymy się managerem.

BOINC
BOINC

screen config

Gdyby ktoś chciał to mój obecny config screena:

# $Id: screenrc,v 1.15 2003/10/08 11:39:03 zal Exp $
#
# /etc/screenrc
#
#   This is the system wide screenrc.
#
#   You can use this file to change the default behavior of screen system wide
#   or copy it to ~/.screenrc and use it as a starting point for your own
#   settings.
#
#   Commands in this file are used to set options, bind screen functions to
#   keys, redefine terminal capabilities, and to automatically establish one or
#   more windows at the beginning of your screen session.
#
#   This is not a comprehensive list of options, look at the screen manual for
#   details on everything that you can put in this file.
#

# ------------------------------------------------------------------------------
# SCREEN SETTINGS
# ------------------------------------------------------------------------------

#startup_message off
#nethack on

#defflow on # will force screen to process ^S/^Q
deflogin on
#autodetach off

# turn visual bell on
vbell on
vbell_msg "   Wuff  ----  Wuff!!  "

# define a bigger scrollback, default is 100 lines
defscrollback 1024

# ------------------------------------------------------------------------------
# SCREEN KEYBINDINGS
# ------------------------------------------------------------------------------

# Remove some stupid / dangerous key bindings
bind ^k
#bind L
bind ^
# Make them better
bind \ quit
bind K kill
bind I login on
bind O login off
bind } history

# An example of a "screen scraper" which will launch urlview on the current
# screen window
#
#bind ^B eval "hardcopy_append off" "hardcopy -h $HOME/.screen-urlview" "screen urlview $HOME/.screen-urlview"

# ------------------------------------------------------------------------------
# TERMINAL SETTINGS
# ------------------------------------------------------------------------------

# The vt100 description does not mention "dl". *sigh*
termcapinfo vt100 dl=5E[M

# turn sending of screen messages to hardstatus off
hardstatus off
# Set the hardstatus prop on gui terms to set the titlebar/icon title
termcapinfo xterm*|rxvt*|kterm*|Eterm* hs:ts=E]0;:fs=07:ds=E]0;07
# use this for the hard status string
hardstatus string "%h%? users: %u%?"

# An alternative hardstatus to display a bar at the bottom listing the
# windownames and highlighting the current windowname in blue. (This is only
# enabled if there is no hardstatus setting for your terminal)
#
#hardstatus lastline "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<"

# set these terminals up to be 'optimal' instead of vt100
termcapinfo xterm*|linux*|rxvt*|Eterm* OP

# Change the xterm initialization string from is2=E[!pE[?3;4lE[4lE>
# (This fixes the "Aborted because of window size change" konsole symptoms found
#  in bug #134198)
termcapinfo xterm 'is=E[rE[mE[2JE[HE[?7hE[?1;4;6l'

# To get screen to add lines to xterm's scrollback buffer, uncomment the
# following termcapinfo line which tells xterm to use the normal screen buffer
# (which has scrollback), not the alternate screen buffer.
#
#termcapinfo xterm|xterms|xs|rxvt ti@:te@

# Enable non-blocking mode to better cope with flaky ssh connections.
defnonblock 5

# ------------------------------------------------------------------------------
# STARTUP SCREENS
# ------------------------------------------------------------------------------

# Example of automatically running some programs in windows on screen startup.
#
#   The following will open top in the first window, an ssh session to monkey
#   in the next window, and then open mutt and tail in windows 8 and 9
#   respectively.
#
# screen top
# screen -t monkey ssh monkey
# screen -t mail 8 mutt
# screen -t daemon 9 tail -f /var/log/daemon.log
startup_message off
escape ^Bb
#screen -t vps 0 ssh -l
#screen -t obsd 1 ssh -l
#screen -t icis 2 ssh -l
#screen -t htop 2 htop
select 0
#caption always "%{=}%-w%{+b w}%n %t%{-b w}%+w %=%c "
#caption always '%{=} %{b}@%H%{w} | %-w%{b}%n %t%{w}%+w%=| %{g}%D %M %d '
#hardstatus alwayslastline "%{b kw}%H %{r}%1` %{w}| %{g}%c %{w}| %{y}%d.%m.%Y %{w}| %{g}%l %{w}| %{-b kw}%u %-Lw%{= rW}%50> %n%f %t %{-}%+Lw%<"
hardstatus alwayslastline '%{=} %{b}@%H%{w} | %-w%{b}%n %t%{w}%+w%=| %{g}%D %M %d '

#LOGS
logfile $HOME/.screenlogs/screen_%H_%m%d%Y_%0c-%t.%n
deflog on
logtstamp on

A wygląda to tak:

screen.rc
screen.rc

Windows po Linuxie

Tytułem wstępu, tak, zainstalowałem Windowsa. Niektórzy pewnie się teraz zaśmieją bo zapierałem się im w oczy ale wirtualka z xp już mi nie wystarczała, a na stawianie wirtualki win 7 z płynnym działaniem nie mam szans. Oczywiście jako niestety potrzebną alternatywę, nie planuje jej używać bez konieczności. Wpis raczej ku pamięci bo to żadne odkrycie ani specjalna sztuka 😉

Tak więc nie planowałem nigdy instalacji 2 systemów, partycje miałem podzielone specjalnie pod Debiana więc trzeba zaopatrzyć się w jakiś system z gparted co by ustawić partycje i naprawić gruba na końcu. Ja tam korzystałem z jakiejś starszej wersji ubuntu ale może to być cokolwiek innego.

Pierwszym krokiem jest oczywiście backup, pewnie go robisz a jeśli nie to zaczniesz. Następnie z livecd:

umount -a

gdyby przypadkiem podmontowało nam nasze partycje, dalej w gparted ustawiamy co nam trzeba. W moim przypadku podział miałem sda1 – ext4, sda2 swap. Zmniejszyłem więc sda1 o 60gb ntfs (tyle sobie ustaliłem, że powinno wystarczyć dla win7(?)) i wpakowałem je przed sda1 z flagą „boot” (przed bo nie wiem czy kolejność ma znaczenie dla win).

Potem instalujemy Windows z cd/dvd/usb czy co tam jeszcze można. Na końcu pozostaje jedynie przeinstalować gruba bo win oczywiście nadpisał początek. Z livecd chrootujemy się na nasz system:

mount /dev/sdaX /media - x to nr partycji z naszym linuxem
mount -o bind /proc /media/proc
mount -o bind /sys /media/sys
mount -o bind /dev /media/dev
chroot /media /bin/bash

i w przypadku grub2:

grub-install /dev/sda
update-grub

i to tyle, powinno działać 😉

Ps. Zasugerujecie mi trochę softu bom nieobeznany w dzisiejszych czasach zbytnio. Jakiś edytor dla różnych języków, film, muzyka, jabber, ftp/menadżer plików, bo póki co zainstalowałem tylko avasta i firefoxa 😛

Backup systemu

Trochę się zastanawiałem jak i czym wykonywać backup mojego vpsa (bo w domu wykorzystuję inne narzędzia) i w sumie postawiłem na rzecz najprostszą. Spakowanie wszystkiego i pobranie. Opcji innych masa, mniej lub bardziej wydajnych i z ciekawymi funkcjami ale zważywszy na moje potrzeby (w zasadzie to zgrać sobie tylko pliki konfiguracyjne ku pamięci) wybrałem właśnie najprostszą metodę. Jedno polecenie pakowania i pobranie pliku w zasadzie załatwia sprawę ale co by troszkę sobie ułatwić życie w czeluściach internetu znalazłem fajny skrypt naszego rodaka który dodaje kilka bajerów.

Całość opiera się na pliku z podanym miejscem które chcemy zarchiwizować oraz co można pominąć:

/
--exclude=/backup/*.tgz*
--exclude=/proc/*
--exclude=/sys/*
--exclude=/tmp/*
--one-file-system

oraz samym skryptem:

#!/bin/bash
#
# Author: Martin Matusiak <numerodix@gmail.com>
# Licensed under the GNU Public License, version 3.

backup_dir=/backup
num_backups=1

verbose="$@"
lists=$backup_dir/*.lst
ext=tgz
date_params="%Y-%m-%d-%H%M"
nice_val="nice -n20"

# colors
wh="e[1;37m"
pl="e[m"
ye="e[1;33m"
cy="e[1;36m"
re="e[1;31m"

if [[ "$verbose" && "$verbose" != "-v" ]]; then
	echo "Usage:  $0 [-v]"
	exit 1
fi

if [ ! -d $backup_dir ]; then
	echo -e "${re}Backup dir $backup_dir does not exist.${pl}"; exit 1
fi

for list in $(ls $lists); do
	name=$(basename $list .lst)
	file_root=$backup_dir/$name.$(date +$date_params)

	stdout="1> /dev/null"
	stderr="2> $file_root.$ext.err"
	if [ "$verbose" ]; then
		stdout=""
	fi

	cmd="cat $list | $nice_val xargs tar zlcfv 
		$file_root.$ext $stderr | tee $file_root.$ext.log $stdout"

	trap 'echo -e "${re}Received exit signal${pl}"; exit 1' INT TERM

	echo " * Running `$name` job..."
	if [ "$verbose" ]; then echo -e ${ye}$cmd${pl}; fi
	echo -en $cy; bash -c "$cmd" ; echo -en $pl
	status_code=$?

	if [ $status_code -gt 0 ]; then
		# Dump error log
		echo -en $re ; cat $file_root.$ext.err
		echo -en $pl ; echo "Tar exit code: $status_code"
	else
		# Kill error file
		rm $file_root.$ext.err
	fi

	# Evict old backups we don't want to keep
	num=$num_backups
	for evict in $(ls -t $backup_dir/$name.*.$ext); do
		if [ $num -le 0 ]; then
			rm -f "$evict"
		else
			num=$(($num-1))
		fi
	done

	# Report number of files in backup
	echo -n "$(wc -l < $file_root.$ext.log) files"
	echo ", $(ls -l $file_root.$ext | awk '{ print $5 }') bytes"

done

i to tyle, prościej się chyba nie da a i objaśnienia raczej nie potrzebne, wystarczy sobie zmodyfikować wedle potrzeb 🙂

SFI, Stallman, Kraków

Dzięki uprzejmości kolegi (nocleg w Krakowie, dzięki Adam :)) udało mi się odwiedzić SFI, a w zasadzie tylko przemowę Richarda Stallmana. Na wcześniejszych edycjach nie byłem więc przedstawię tylko moje subiektywne spostrzeżenia.

Otóż pojawiliśmy się na styk o wyznaczonej godzinie i w zasadzie prawie cała sala była już pełna (chyba nic dziwnego) i zaczęła się przemowa. Tutaj chyba tematy podobne na wszystkich konferencjach z Richardem Stallmanem (tak myślę) czyli FSF, zły MS, Apple, Coca Cola, Facebook, Android itp. Nie zabrakło również wzmianki o kościele Emacsa. Całość ciekawie przedstawiona, z żartami i nawet jeżeli ktoś z tezami się nie zgadza, albo niekoniecznie w całości to z pewnością słuchając nic nie stracił.

Niestety pojawiły się wpadki organizacyjne które na prawdę mnie zdziwiły i rozśmieszyły. Zepsuty mikrofon „przenośny” – zero reakcji, trzeba było korzystać z „mównicy”. Prośba o klimatyzację, tudzież otwarcie okien została skwitowana tekstem „jest zima”. Dwa pytania od publiczności z braku czasu (nie wiem co ich tak goniło, Stallman zaproponował więc spotkanie w jakimkolwiek miejscu na większą ilość pytań niestety już tam nie poszliśmy). Przerwanie aukcji z powodu przebicia kwoty 200 zł no i znakomita wpadka językowa na pożegnanie, „można wychodzić oba wyjściami” (czy coś w ten deseń :)).

Generalnie ten punkt imprezy oceniam na plus pomimo wpadek, na innych nie byłem więc nie wspomnę 🙂

Baldurs Gate Enhanced Edition

Totalna żenada, od razu z grubej rury ale ten twór nie powinien wyjść nigdy na światło dzienne.

Baldurs Gate choć jest grą starą ale wręcz doskonałą, klasyka, nic dodać nic ująć. Gdy kilka miesięcy temu dowiedziałem się o projekcie „EE” miałem spore oczekiwania niestety wyszło jak wyszło. Nabijanie ludzi na kasę, 20 dolarów za coś co nie oferuje nic więcej poza przygodą, kilkoma npc i paroma poprawkami to się w ogóle nie opłaca. Już lepiej za kilka groszy kupić bg 1 + 2 z dodatkami i cieszyć się prawdziwą grą która działa (w EE oczywiście brak wsparcia dla kart intela, chociaż da się grę na wine uruchomić). Wersje na tablety? Nie wiem jak tam w ios ale na androidzie już dawno temu można było (chociaż jak to jest z grywalnością to nie wiem bo nie mam tabletu i nie próbowałem osobiście) aczkolwiek uważam, że to się kompletnie nie opłaca. Tłumaczenie w zasadzie tworzone przez wolontariuszy, wymuszone i z problemami.

Kolejny raz odgrzanie starego smacznego kotleta zakończyło się twardym kołkiem, nie do strawienia. Żenada, szkoda czasu i pieniędzy, zmarnowanych oczekiwań. Współczuję tym co zapłacili, ja tam sobie jak mnie najdzie ochota na serię BG, IWD czy Tormenta to sobie odpalę normalne, stare ale jare wersje przy których można w spokoju marnować życie 🙂