rescue.tar.gz
The only thing to configure is the backup-script:
All your partition's must have an UUID.
With "uuidgen | xargs mkswap /dev/sda1 -U" and "uuidgen | xargs tune2fs /dev/sda1 -U" you can generate one.
This is an example of a backup of a system with two partitions:
#!/bin/sh* for each tar an exlude-file can be defined
cat >root_exclude <<EOF
/lost+found/*
/tmp/*
EOF
cat >var_exclude <<EOF
./tmp/*
./run/*
./lock/*
./log/messages*
./lost+found/*
EOF
sudo tar -cSp --one-file-system --numeric-owner --atime-preserve \
--exclude-from=root_exclude -f $(hostname).root.tar /
sudo tar -cjSp --one-file-system --numeric-owner --atime-preserve \
--exclude-from=var_exclude -f $(hostname).var.tar.bz2 --directory /var .
uuid() { sudo blkid -o value -s UUID /dev/$1; }
fstype() { sudo blkid -o value -s TYPE /dev/$1; }
inodesize() { sudo tune2fs -l /dev/$1 | grep "Inode size" | sed -e 's/[^0-9]//g'; }
raiduuid() { sudo sed -n "s/^.*$1.*UUID=\(.*\)/\1/p" /etc/mdadm/mdadm.conf; }
partitioninfo() { echo "$(echo $1|sed -e 's/[^0-9]//g') $(uuid $1) $(fstype $1)"; }
cat >$(hostname).cfg <<EOF
DISK_PARTITIONS=",1024,S;,10000,L,*;,,L"
ARCHIVES="$(partitioninfo sda2) $(hostname).root.tar.bz2
$(partitioninfo sda3) $(hostname).var.tar.bz2"
SWAP="1 $(uuid sda1)"
GRUB=1
GRUB1_PARTITION=1
GRUB1_INODESIZE=$(inodesize sda2)
EOF
* files are named HOSTNAME.root.tar.bz2, HOSTNAME.var.tar.bz2 and HOSTNAME.cfg
* this backup needs a small config-file (HOSTNAME.cfg)
DISK_PARTITIONS is used by sfdisk and has to be definded in its INPUT FORMAT
ARCHIVES takes a config line for each partition with an optional tar archive at the end
SWAP starts with the number of the partition and the uuid of it
GRUB needs the version of grub
GRUB1_PARTITION is only needed for grub 1 and is the boot partition (counting starts with 0)
GRUB1_INODESIZE is needed because older grub1 can not boot with a filesystem of different inode size
For a raid1 system with only one filesystem the config looks like
DISK_PARTITIONS=",8000,S;,,L,* ,8000,S;,,L,*"After running the backup script HOSTNAME.root.tar.bz2, HOSTNAME.var.tar.bz2 and HOSTNAME.cfg are build.
RAID_UUIDS="$(raiduuid md0) $(raiduuid md1)"
ARCHIVES="$(partitioninfo md1) $(hostname).root.tar.bz2"
SWAP="0 $(uuid md0)"
GRUB=1
GRUB1_PARTITION=1
GRUB1_INODESIZE=$(inodesize md1)
Now you can run ./rescue-build.sh or copy these files to your backup server (where you put the files from other systems) and run there ./rescue-build.sh. Now you got a directory called image with all your archives, your running kernel and a configured initrd (initramfs).
With ./rescue-create-stick.sh /dev/STICKDEVICE your stick to restore is prepared (Warning all data on the stick is erased!).
With kvm you can test the restore process:
Therefore run sudo ./rescue-create-kmv-image.sh.
The build image can be mounted with sudo ./rescue-kvm-mount.sh to ./mnt and unmounted with sudo ./rescue-kvm-umount.sh.
Test the image with rescue-kvm-restore.sh and test the restored image with ./rescue-kvm-test.sh.
[ view entry ] ( 1479 views ) | print article
#> apt-get install sispmctl
Switch Socket on with sispmctl -o 1, off with sispmctl -f 1 and get status with sispmctl -m all
To have premission for a webserver to execute the command:
/etc/udev/rules.d/90-local.rules:
ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", \Because sometimes a wrong status came back i read it twice and compare it
ATTRS{idVendor}=="04b4", ATTRS{idProduct}=="fd13", \
GROUP="www-data", MODE="0660"
<?php
function sispm_status() {
$pins1=array(0=>'0'); $pins2=array(0=>'1');
while ($pins1 !== $pins2) {
unset($pins1);
unset($pins2);
exec("/usr/bin/sispmctl -qnm all", $pins1);
exec("/usr/bin/sispmctl -qnm all", $pins2);
}
return $pins1;
}
$pins = sispm_status();
if (isset($_POST['update']))
for ($i = 0; $i <= 3; $i++)
if (isset($_POST["pin$i"])) {
if (!$pins[$i]) exec("/usr/bin/sispmctl -qno ".($i+1)); }
else if ($pins[$i]) exec("/usr/bin/sispmctl -qnf ".($i+1));
$pins = sispm_status();
?>
<html>
<body>
<form method="post">
<input type="checkbox" name="pin0" value="1" <?= ($pins[0]?'checked':'') ?>> Socket 1<br>
<input type="checkbox" name="pin1" value="1" <?= ($pins[1]?'checked':'') ?>> Socket 2<br>
<input type="checkbox" name="pin2" value="1" <?= ($pins[2]?'checked':'') ?>> Socket 3<br>
<input type="checkbox" name="pin3" value="1" <?= ($pins[3]?'checked':'') ?>> Socket 4<br>
<input type="submit" name="update">
</form>
</body>
</html>
perl:
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
my $cgi = CGI->new();
my @ports=("PC","Printer","-","-");
print "Content-type: text/html\n";
print "\n";
print "<HTML><HEAD><TITLE>USB Steckdosenleiste</TITLE><META http-equiv=\"refresh\" content=\"60;steckdose.cgi\"></HEAD>\n\n";
print "<BODY>\n";
for my $port ($cgi->param()) {
if ($cgi->param($port) eq "on") { system "/usr/bin/sispmctl -q -o $port"; }
elsif ($cgi->param($port) eq "off") { system "/usr/bin/sispmctl -q -f $port"; }
}
print "<H1>USB Steckdosenleiste</H1><UL>\n";
my @states = `/usr/bin/sispmctl -q -g all`;
my $cnt = 1;
for my $state (@states) {
if ($ports[$cnt-1] ne "-") {
if ($state eq "off\n") { print "<LI>".$ports[$cnt-1]." ist ausgeschaltet [<A href=\"steckdose.cgi?$cnt=on\">einschalten</A>]\n"; }
else { print "<LI>".$ports[$cnt-1]." ist eingeschaltet [<A href=\"steckdose.cgi?$cnt=off\">ausschalten</A>]\n"; }
}
$cnt++;
}
print "</UL>\n";
print "</BODY></HTML>"
[ view entry ] ( 1527 views ) | print article
Many things changed for bluez4. Now everything is made through dbus commands.
apt-get install bluetooth bluez (on server and client)
First check for bdaddr on server and client:
Server:> hcitool dev
Devices:
hci0 00:01:1A:63:49:33
Client:> hcitool dev
Devices:
hci0 00:02:6E:53:42:78
Pairing:
Server:> /usr/share/doc/bluez/examples/test-adapter discoverable on
Server:> /usr/share/doc/bluez/examples/simple-agent
Client:> /usr/share/doc/bluez/examples/simple-agent 00:02:6E:53:42:78 00:01:1A:63:49:33
Hint: On newer systems use /usr/bin/bluez-test-adapter, /usr/bin/bluez-simple-agent and bluez-test-network
On Server:
Agent registered
RequestPinCode (/org/bluez/25897/hci0/dev_00_02_6E_53_42_78)
Enter PIN Code: 1234
(keep simple-agent running)
On Client:
RequestPinCode (/org/bluez/4078/hci0/dev_00_01_1A_63_49_33)
Enter PIN Code: 1234
Release
New device (/org/bluez/4078/hci0/dev_00_01_1A_63_49_33)
Pairing keys are stored hashed in /var/lib/bluetooth/<local bdaddr>/linkkeys
Network:
--- /usr/share/doc/bluez/examples/test-networkClient:> /usr/share/doc/bluez/examples/test-network.sh 00:01:1A:63:49:33
+++ /usr/share/doc/bluez/examples/test-network.sh
@@ -35,9 +35,10 @@
print "Press CTRL-C to disconnect"
try:
- time.sleep(1000)
- print "Terminating connection"
+ while 1:
+ time.sleep(1000)
except:
pass
+print "Terminating connection"
network.Disconnect()
(keep test-network running)
On Server:
Authorize (/org/bluez/25897/hci0/dev_00_02_6E_53_42_78, 0000000f-0000-1000-8000-00803f9b24fa)
Authorize connection (yes/no): yes
Now you can stop simple-agent.
Server:> ifconfig ifconfig bnep0 192.168.0.1 netmask 255.255.255.0 up
Client:> ifconfig ifconfig bnep0 192.168.0.2 netmask 255.255.255.0 up
Now you can ping each other.
To avoid start simple-agent on server for connection authorisation each time you can trust the client with:
Server:> /usr/share/doc/bluez/examples/test-device trusted 00:01:1A:63:49:33 on
Automatisation:
On my server i'm running a bridged network with dhcp support, therefore i use udev to add bnep to my bridge:
/etc/udev/rules.d/local.rules:
ACTION=="add", SUBSYSTEM=="net", KERNEL=="bnep?*", PROGRAM="/usr/sbin/brctl addif br0 %k"
Client:
/etc/udev/rules.d/local.rules:
ACTION=="add", SUBSYSTEM=="net", KERNEL=="bnep?*", PROGRAM="/sbin/dhclient -nw -pf /var/run/dhclient-%k.pid %k"
ACTION=="remove", SUBSYSTEM=="net", KERNEL=="bnep?*", PROGRAM="/usr/bin/pkill -9 dhclient"
maybe you need to reload udev!
On clientside you only have to keep running
/usr/share/doc/bluez/examples/test-network.sh 00:01:1A:63:49:33
Usually this should be done by networkmanager but this is not supported (now)
[ view entry ] ( 2636 views ) | print article
Iodine server with public IP:
#> apt-get install iodine
For "good" connection i used a mtu of 256 through my provider DNS.
On local network no mtu change was necessary.
/etc/default/iodine
START_IODINED="true"#> sysctl -e net.ipv4.ip_forward=1
IODINED_ARGS="-m 256 -l IODINE_SERVER_IP 10.0.0.1 tunnel.DOMAIN"
IODINED_PASSWORD="mypassword"
#> iptables -t nat -A POSTROUTING -s 10.0.0.0/255.255.255.0 -o eth0 -j MASQUERADE
Bind9 server:
zonesfile:
zone "DOMAIN" in {zonefile:
type master;
file "/etc/bind/zones/DOMAIN";
allow-query { any; };
};
zone "tunnel.DOMAIN" in {
type forward;
forward only;
forwarders {
IODINE_SERVER_IP;
};
};
tunnel 1D IN NS tunnelhost
tunnelhost 1D IN A IODINE_SERVER_IP
Client:
#> apt-get install iodine
#> iodine -m 256 -P mypassword tunnel.DOMAIN
#> route add default gw 10.0.0.1
Well it seams that my provider drop's packets with some payload in it:
#> ping -c1 -s 109 10.0.0.1 fails
but
#> ping -c1 -s 109 -p ff 10.0.0.1 succeeds
[ view entry ] ( 1444 views ) | print article
Each partition of plugged in usb stick's should be accessible with automount.
My mountpoints will be /media/usb/part0, /media/usb/part1, ...
Example:
The fist plugged stick has two partitions. The second only one.
/media/usb/part0 ... first stick partition one
/media/usb/part1 ... first stick partition two
/media/usb/part2 ... second stick partition one
If the second stick is plugged in first:
/media/usb/part0 ... first stick partition one
/media/usb/part1 ... second stick partition one
/media/usb/part2 ... second stick partition two
/etc/udev/rules.d/90-local.rules
ACTION=="add", BUS=="usb", SUBSYSTEM=="block", KERNEL=="sd?[0-9]*", \OPTIONS+="nowatch" avoids removal by udev of the symlink after unmounting
NAME="%k", PROGRAM="get_usbdisc_symlink", SYMLINK+="%c", OPTIONS+="nowatch"
/lib/udev/get_usbdisc_symlink
#!/bin/sh -e#> apt-get install autofs5
. /lib/udev/rule_generator.functions
[ -h /dev/usbpart0 ] && \
echo usbpart$(raw_find_next_available $(ls /dev/usbpart[0-9]*)) || \
echo "usbpart0"
exit 0
/etc/auto.master
#+auto.master
/media/usb /etc/auto.usb --timeout=5 --ghost
My usb sticks will be unmounted after 5 seconds not being in use.
With "--ghost" /media/usb/partX will automatically created.
/etc/auto.usb
part0 -fstype=auto,noexec,nodev,nodiratime,noatime,nosuid :/dev/usbpart0To have readwrite access for users add ",uid=$UID,gid=$GID"
part1 -fstype=auto,noexec,nodev,nodiratime,noatime,nosuid :/dev/usbpart1
part2 -fstype=auto,noexec,nodev,nodiratime,noatime,nosuid :/dev/usbpart2
part3 -fstype=auto,noexec,nodev,nodiratime,noatime,nosuid :/dev/usbpart3
part4 -fstype=auto,noexec,nodev,nodiratime,noatime,nosuid :/dev/usbpart4
part5 -fstype=auto,noexec,nodev,nodiratime,noatime,nosuid :/dev/usbpart5
part6 -fstype=auto,noexec,nodev,nodiratime,noatime,nosuid :/dev/usbpart6
part7 -fstype=auto,noexec,nodev,nodiratime,noatime,nosuid :/dev/usbpart7
For more partitions extend the lines.
[ view entry ] ( 2128 views ) | print article
<<First <Back | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | Next> Last>>