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 🙂

Nie kasowanie boot messages

Ku pamięci.

Nie wiedzieć czemu ktoś kiedyś wpadł na pomysł aby informacje podawane podczas włączania systemu na samym końcu wyczyścić, co by tty1 ładnie i czysto wypluwało tylko zachętę do zalogowania. Generalnie gdy system działa to nic złego, gorzej gdy gdzieś mignie nam FAIL i nie wiemy przy czym. Rozwiązanie? w /etc/inittab zmieniamy

1:2345:respawn:/sbin/getty 38400 tty1

na

1:2345:respawn:/sbin/getty --noclear 38400 tty1

i to tyle, a panu który wymyślił ukrywanie informacji już podziękujemy 🙂

Aktualizacja Owncloud 5 – problemy

Dwa małe problemy z aktualizacją Owncloud do najnowszej wersji, tj. 5.

Po pierwsze po udanej aktualizacji plików u niektórych osób (w tym i u mnie) strona zatrzymuję się na informacji „owncloud is in maintance mode”, przypadków na których błąd występuje podanych jest kilka (różne wersje os, przeglądarek) a rozwiązaniem jest zmiana w owncloud/config/config.php

'maintenance' => true,

na

'maintenance' => false,

restart apache czy co tam macie i ponowne otwarcie w przeglądarce.

Jeżeli z kolei na stronie administracyjnej wypluwa błąd o braku locale=en_US.UTF8 mimo iż jest w systemie to cóż, wielkość liter ma znaczenie a najwyraźniej o tym zapomnieli (w moim przypadku prawidłowo brzmi en_US.utf8). W owncloud/lib/util.php w linijce 614 dodajemy poprawną wersję:

$result = setlocale(LC_ALL, 'en_US.UTF-8', 'en_US.UTF8','en_US.utf8');

Munin

Ku pamięci 🙂

apt-get install munin munin-node

w /etc/munin/munin.conf ustawiamy:

dbdir   /var/lib/munin
htmldir /var/www/munin - lub gdziekolwiek chcemy
logdir  /var/log/munin
rundir  /var/run/munin

tmpldir /etc/munin/templates

[server1.example.com]
    address 127.0.0.1
    use_node_name yes

w /etc/munin/apache.conf ustawiamy sobie odpowiednio ścieżki i kto może statystyki oglądać, tudzież zabezpieczyć się hasłem 🙂

chown munin:munin /var/www/munin
/etc/init.d/munin-node restart
/etc/init.d/apache2 restart

make-sqldeveloper-package chmod: missing operand after `755'

Tak ku pamięci bo poprawiona paczka nadal nie wprowadzona do repo sida. Czyli jeżeli pojawia się taka informacja w trakcie budowania paczki sqldevelopera trzeba sobie ręcznie aplikować poprawkę w /usr/bin/make-sqldeveloper-package, w linii 381 zmieniamy:

${FIND} "${OPTDIR}" ! ( -type d -o -name "*.jar" ) |${XARGS} ${XARGS_OPTS} ${FILE} ${FILE_OPTS} |${GREP} ${GREP_OPTS} "shell script text executable" |${CUT} ${CUT_OPTS_FUNC_CLEAN} |${XARGS} ${XARGS_OPTS} ${CHMOD} ${CHMOD_OPTS}

na:

${FIND} "${OPTDIR}" ! ( -type d -o -name "*.jar" ) |${XARGS} ${XARGS_OPTS} ${FILE} ${FILE_OPTS} |${GREP} ${GREP_OPTS} "shell script" | ${GREP} ${GREP_OPTS} "text executable" |${CUT} ${CUT_OPTS_FUNC_CLEAN} |${XARGS} ${XARGS_OPTS} ${CHMOD} ${CHMOD_OPTS}