summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorMarc Vertes <mvertes@free.fr>2020-06-15 15:47:00 +0200
committerMarc Vertes <mvertes@free.fr>2020-06-15 15:47:00 +0200
commita34abe3152f64881567ed39a49327fc1c81809f9 (patch)
tree72a96ccc4c291c3fc4bc65b40b6d0cd9467132a4 /bin
parentbe6b10671bf77dcc6e2fba829cef11c800652880 (diff)
update
Diffstat (limited to 'bin')
-rwxr-xr-xbin/backup17
-rwxr-xr-xbin/byo34
-rwxr-xr-xbin/yoda12
3 files changed, 48 insertions, 15 deletions
diff --git a/bin/backup b/bin/backup
index 3f1d586..059f2dc 100755
--- a/bin/backup
+++ b/bin/backup
@@ -1,17 +1,12 @@
#!/bin/sh
+# Incremental backup using rsync(1).
[ "$USER" = root ] || exec sudo "$0" "$@"
-# incremental backup using rsync(1)
-
-die() { echo "$0: fatal: $@" >&2; exit 1; }
-
-#[ "$(id -u)" = 0 ] || die must run as root
-
-while getopts :v opt; do
+while getopts :Fv opt; do
case $opt in
- (v) optv=v ;;
- (*) echo "Usage: $0 [-v] [[host:]dir]"; exit 1 ;;
+ (F|v) eval "opt$opt=$opt" ;;
+ (*) echo "Usage: $0 [-Fv] [[host:]dir]"; exit 1 ;;
esac
done
shift $((OPTIND - 1))
@@ -25,4 +20,6 @@ case $last in
(*) opt_link=;;
esac
-rsync -DSHxa$optv --exclude-from=/etc/backup/ignore $opt_link / /boot $dest/$date
+[ "$optF" ] && fsfreeze -f / && trap 'fsfreeze -u /' EXIT
+
+rsync -HSxa$optv --exclude-from=/etc/backup/ignore $opt_link / /boot $dest/$date
diff --git a/bin/byo b/bin/byo
new file mode 100755
index 0000000..173c2a7
--- /dev/null
+++ b/bin/byo
@@ -0,0 +1,34 @@
+#!/bin/sh -e
+# Backup to yoda
+[ "$USER" = root ] || exec sudo "$0" "$@"
+
+usage='Usage: byo [-cdk]
+Backup local disk to yoda external disk.
+
+Options:
+ -c close and umount yoda
+ -d dedupe yoda
+ -k do not umount and close yoda
+'
+
+while getopts :cdk opt; do
+ case $opt in
+ (c|d|k) eval "opt$opt=$opt" ;;
+ (*) printf %s "$usage"; exit 1 ;;
+ esac
+done
+shift $((OPTIND - 1))
+
+yoda_uuid='8c463221-6bb7-414e-9060-c9570bb3a6bb'
+
+dest=/mnt/backup/$(hostname)
+[ -b /dev/mapper/yoda ] && noclose=1 || cryptsetup open "$(blkid --uuid "$yoda_uuid")" yoda
+findmnt /dev/mapper/yoda /mnt >/dev/null && noumount=1 || mount /dev/mapper/yoda /mnt
+time backup -Fv "$dest"
+backup-clean -v "$dest"
+[ ! "$optd" ] || time duperemove -drh --hashfile="$dest/.hashfile" "$dest"
+[ ! "$optk" ] || noumount=1 noclose=1
+[ ! "$optc" ] || noumount='' noclose=''
+[ "$noumount" ] || umount /mnt
+[ "$noclose" ] || cryptsetup close yoda
+echo "bye"
diff --git a/bin/yoda b/bin/yoda
index 4a2e0f9..8ff9e81 100755
--- a/bin/yoda
+++ b/bin/yoda
@@ -1,7 +1,9 @@
#!/bin/sh
# Setup an archlinux system to a media
-version='yoda-0.2'
+[ "$USER" = root ] || exec sudo "$0" "$@"
+
+version='yoda-0.3'
help() {
echo 'usage: yoda [-CV] [-u user] dev
@@ -38,7 +40,7 @@ skip() {
# return 1 if any of the required commands is missing
prereq() {
ok='ok'
- for cmd in cryptsetup dd fdisk mkfs.fat mkfs.ext4 mount pacstrap genfstab arch-chroot
+ for cmd in cryptsetup dd fdisk mkfs.fat mkfs.ext4 mkfs.xfs mount pacstrap genfstab arch-chroot
do
command -v "$cmd" >/dev/null || { ok=''; echo "$cmd not found"; }
done
@@ -81,7 +83,7 @@ step2() {
# Step 3: Format partitions.
step3() {
mkfs.fat -F32 "${dev}${ppref}1"
- yes | mkfs.ext4 "$rootpart"
+ mkfs.xfs "$rootpart"
}
# Step 4: Mount partitions.
@@ -172,7 +174,7 @@ DNSSEC=no
EOT
packages="linux linux-firmware intel-ucode amd-ucode sof-firmware \
- dosfstools sudo vi wireless_tools wpa_supplicant openssh arch-install-scripts"
+ xfsprogs dosfstools sudo vi wireless_tools wpa_supplicant openssh arch-install-scripts"
arch-chroot /mnt << EOT
locale-gen
@@ -237,8 +239,8 @@ while getopts :CFH:S:u:V opt; do
done
shift $((OPTIND - 1))
-[ "$(id -u)" = 0 ] || die "not root"
[ "$1" ] && dev=$1 || die 'no device'
+
par=${dev##*/}root
case $dev in (*nvme*) ppref='p';; esac
rootpart="${dev}${ppref}2"