From b05a5cfb7b3d83d32e1efbaf859caa3682930e6b Mon Sep 17 00:00:00 2001 From: 6543 Date: Thu, 26 Apr 2018 17:16:09 +0200 Subject: [PATCH 01/38] create docu p1 mk placeholder --- changes/remaster | 0 doc/Error_Liste.txt | 20 ++++++++++++++++++++ doc/Strukture.md | 0 doc/strukture | 28 ++++++++++++++++++++++++++++ gendeb.sh | 2 +- 5 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 changes/remaster create mode 100644 doc/Error_Liste.txt create mode 100644 doc/Strukture.md create mode 100644 doc/strukture mode change 100644 => 100755 gendeb.sh diff --git a/changes/remaster b/changes/remaster new file mode 100644 index 0000000..e69de29 diff --git a/doc/Error_Liste.txt b/doc/Error_Liste.txt new file mode 100644 index 0000000..c90360c --- /dev/null +++ b/doc/Error_Liste.txt @@ -0,0 +1,20 @@ +Erorr Liste: + +ID: Description +---------------------------------------------------- +1 Allgemeiner Fehler +2 No Paramters / wrong parameters +3 Wrong Settings! +4 Programm missing + +10 no root +11 file no found +12 dir not found +13 cant create/delete file/dir +14 corrupt file (unsquashfs, mount iso, ...) +15 wrong file (iso has no squashfs-file ...) + + +20 mount error +21 unmoun error +22 incorrect filesystem diff --git a/doc/Strukture.md b/doc/Strukture.md new file mode 100644 index 0000000..e69de29 diff --git a/doc/strukture b/doc/strukture new file mode 100644 index 0000000..f209963 --- /dev/null +++ b/doc/strukture @@ -0,0 +1,28 @@ +# Src + +raw scripts .. + +## functions + + - creat iso + - burn cd ... + - clean workspace ... + + +## distros + +scripts vor distros + - update + - set network settings + - set OS settings + +## mods + - for example: install & enable xrdp + - set default passwd + - ... + +## web +placeholder for webfiles ... + +## pxe +placeholder for pxefiles ... diff --git a/gendeb.sh b/gendeb.sh old mode 100644 new mode 100755 index 4ee6348..d975706 --- a/gendeb.sh +++ b/gendeb.sh @@ -2,7 +2,7 @@ # at the moment only generate dir structure in /build echo "clear build" -rm -v -R ./build +[ -d ./build ] && rm -v -R ./build mkdir build echo "copy files" From eedeecbcb60084c1067167a7c5252b4d2a42666e Mon Sep 17 00:00:00 2001 From: 6543 Date: Thu, 26 Apr 2018 18:43:56 +0200 Subject: [PATCH 02/38] ... --- Error_Liste.txt | 20 -------------------- changes/remaster | 0 ChangeLog => changes/remaster.md | 0 doc/strukture | 28 ---------------------------- 4 files changed, 48 deletions(-) delete mode 100644 Error_Liste.txt delete mode 100644 changes/remaster rename ChangeLog => changes/remaster.md (100%) delete mode 100644 doc/strukture diff --git a/Error_Liste.txt b/Error_Liste.txt deleted file mode 100644 index c90360c..0000000 --- a/Error_Liste.txt +++ /dev/null @@ -1,20 +0,0 @@ -Erorr Liste: - -ID: Description ----------------------------------------------------- -1 Allgemeiner Fehler -2 No Paramters / wrong parameters -3 Wrong Settings! -4 Programm missing - -10 no root -11 file no found -12 dir not found -13 cant create/delete file/dir -14 corrupt file (unsquashfs, mount iso, ...) -15 wrong file (iso has no squashfs-file ...) - - -20 mount error -21 unmoun error -22 incorrect filesystem diff --git a/changes/remaster b/changes/remaster deleted file mode 100644 index e69de29..0000000 diff --git a/ChangeLog b/changes/remaster.md similarity index 100% rename from ChangeLog rename to changes/remaster.md diff --git a/doc/strukture b/doc/strukture deleted file mode 100644 index f209963..0000000 --- a/doc/strukture +++ /dev/null @@ -1,28 +0,0 @@ -# Src - -raw scripts .. - -## functions - - - creat iso - - burn cd ... - - clean workspace ... - - -## distros - -scripts vor distros - - update - - set network settings - - set OS settings - -## mods - - for example: install & enable xrdp - - set default passwd - - ... - -## web -placeholder for webfiles ... - -## pxe -placeholder for pxefiles ... From 1c4dc6ac567b9bea1ce089aff5417f75d6a7bb60 Mon Sep 17 00:00:00 2001 From: 6543 Date: Thu, 26 Apr 2018 19:46:17 +0200 Subject: [PATCH 03/38] create docu p2 --- doc/Strukture.md | 28 ++++++++++++++++++++++++++++ gendeb.sh | 13 +++++++++++-- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/doc/Strukture.md b/doc/Strukture.md index e69de29..f209963 100644 --- a/doc/Strukture.md +++ b/doc/Strukture.md @@ -0,0 +1,28 @@ +# Src + +raw scripts .. + +## functions + + - creat iso + - burn cd ... + - clean workspace ... + + +## distros + +scripts vor distros + - update + - set network settings + - set OS settings + +## mods + - for example: install & enable xrdp + - set default passwd + - ... + +## web +placeholder for webfiles ... + +## pxe +placeholder for pxefiles ... diff --git a/gendeb.sh b/gendeb.sh index d975706..c1041ed 100755 --- a/gendeb.sh +++ b/gendeb.sh @@ -1,12 +1,21 @@ #!/bin/bash # at the moment only generate dir structure in /build +# setup build dir +rootfs=build echo "clear build" -[ -d ./build ] && rm -v -R ./build -mkdir build +[ -d $rootfs ] && rm -v -R $rootfs +mkdir $rootfs echo "copy files" ## skripte copieren +# remaster +mkdir -p $rootfs/usr/bin/ +cp -v src/remaster.sh $rootfs/usr/bin/remaster +chmod +x $rootfs/usr/bin/remaster +# modules +mkdir -p $rootfs/usr/lib/remaster/ +#... # Pfade anpassen From da68365153a6497b63beb02b8b588a2b13e85755 Mon Sep 17 00:00:00 2001 From: 6543 Date: Thu, 26 Apr 2018 20:58:19 +0200 Subject: [PATCH 04/38] restructure: seperate config --- changes/remaster.md | 2 ++ gendeb.sh | 34 +++++++++++++++------- src/config.sample.cfg | 39 +++++++++++++++++++++++++ src/dist/desinfect17 | 0 src/dist/ubuntu.16.04 | 0 src/functions/chroot_clean | 0 src/mods/xrdp | 0 src/pxe/pxe.cfg | 0 src/remaster.sh | 59 ++++++++++++++++---------------------- src/web/index.html | 0 10 files changed, 89 insertions(+), 45 deletions(-) create mode 100644 src/config.sample.cfg create mode 100644 src/dist/desinfect17 create mode 100644 src/dist/ubuntu.16.04 create mode 100644 src/functions/chroot_clean create mode 100644 src/mods/xrdp create mode 100644 src/pxe/pxe.cfg create mode 100644 src/web/index.html diff --git a/changes/remaster.md b/changes/remaster.md index e69de29..7774b43 100644 --- a/changes/remaster.md +++ b/changes/remaster.md @@ -0,0 +1,2 @@ +2018-04-26 - 1.9.1 + * seperate script and config diff --git a/gendeb.sh b/gendeb.sh index c1041ed..11bd7ae 100755 --- a/gendeb.sh +++ b/gendeb.sh @@ -1,25 +1,39 @@ #!/bin/bash # at the moment only generate dir structure in /build -# setup build dir -rootfs=build +##################### +## setup build dir ## +##################### + +rootdir=build echo "clear build" -[ -d $rootfs ] && rm -v -R $rootfs -mkdir $rootfs +[ -d $rootdir ] && rm -v -R $rootdir +mkdir $rootdir + +###################### +## skripte copieren ## +###################### echo "copy files" -## skripte copieren + # remaster -mkdir -p $rootfs/usr/bin/ -cp -v src/remaster.sh $rootfs/usr/bin/remaster -chmod +x $rootfs/usr/bin/remaster +mkdir -p $rootdir/usr/bin/ +cp -v src/remaster.sh $rootdir/usr/bin/remaster +chmod +x $rootdir/usr/bin/remaster + # modules -mkdir -p $rootfs/usr/lib/remaster/ -#... +mkdir -p $rootdir/usr/lib/remaster/ +for i in dist functions mods; do + cp -v src/$i/* $rootdir/usr/lib/remaster/ +done + +# setting +cp -v src/config.sample.cfg $rootdir/etc/remaster/config.sample.cfg # Pfade anpassen #sed ... + #mkdeb... #not jet diff --git a/src/config.sample.cfg b/src/config.sample.cfg new file mode 100644 index 0000000..b16bc57 --- /dev/null +++ b/src/config.sample.cfg @@ -0,0 +1,39 @@ +#cfg + +######################################################### +## sample-config rename it to config.cfg after changes ## +######################################################### + +## MODUS +modus_default="update_pxe" + +#CD/DVD +#entweder iso_source oder filesystem_source alls quelle +# -> bei iso gen erforderlich! +iso_source="/data/remaster/desinfect-2017.iso" +#destination optinal +iso_destination="/data/remaster/result/custom_desinfect_`date '+%Y-%m-%d'`.iso" +iso_lable="DESINFECT_`date '+%Y-%m-%d'`" + +#Filesystem (for pxe) +#entweder iso_source oder filesystem_source alls quelle +filesystem_source="/data/remaster/result/filesystem.squashfs" + +#Network +proxy_host="proxy.local" +proxy_port="8080" +domain="local" +nameserver="10.x.x.2,10.x.x.1" + +#remaster_script +distro="desinfect2017" + +#LOG +log_file="/data/remaster/logs/`date '+%Y-%m-%d'`.log" +log_mail_source="desinfect@email.clocal" +log_mail_smtp="smtp.mail.local:25" +log_mail_aim="6543@email.clocal" +log_mail_subject="Desinfect_Remaster" + +#Sonstiges +tools_list="xrdp clamav nano htop nmon iftop tmux dsniff nmap openssh-server tightvncserver rsync e2fsprogs foremost gddrescue recoverjpeg safecopy sleuthkit testdisk arp-scan" diff --git a/src/dist/desinfect17 b/src/dist/desinfect17 new file mode 100644 index 0000000..e69de29 diff --git a/src/dist/ubuntu.16.04 b/src/dist/ubuntu.16.04 new file mode 100644 index 0000000..e69de29 diff --git a/src/functions/chroot_clean b/src/functions/chroot_clean new file mode 100644 index 0000000..e69de29 diff --git a/src/mods/xrdp b/src/mods/xrdp new file mode 100644 index 0000000..e69de29 diff --git a/src/pxe/pxe.cfg b/src/pxe/pxe.cfg new file mode 100644 index 0000000..e69de29 diff --git a/src/remaster.sh b/src/remaster.sh index acd46d5..0cddef8 100755 --- a/src/remaster.sh +++ b/src/remaster.sh @@ -1,47 +1,36 @@ #!/bin/bash -#@version 1.9.0 +#@version 1.9.1 #@autor 6543@obermui.de -#@date 2018-03-26 +#@date 2018-04-26 #@licence GNUv3 ##################################################################################### ################## S e t t i n g s ################################################## ##################################################################################### +#get base dir +rootdir=`echo $0 | rev | cut -d "/" -f 2- | rev`/../../ +rootdir=`readlink -e $rootdir` -## MODUS -modus_default="update_pxe" - -#CD/DVD -#entweder iso_source oder filesystem_source alls quelle -# -> bei iso gen erforderlich! -iso_source="/data/remaster/desinfect-2017.iso" -#destination optinal -iso_destination="/data/remaster/result/custom_desinfect_`date '+%Y-%m-%d'`.iso" -iso_lable="DESINFECT_`date '+%Y-%m-%d'`" - -#Filesystem (for pxe) -#entweder iso_source oder filesystem_source alls quelle -filesystem_source="/data/remaster/result/filesystem.squashfs" - -#Network -proxy_host="proxy.local" -proxy_port="8080" -domain="local" -nameserver="10.x.x.2,10.x.x.1" - -#remaster_script -distro="desinfect2017" - -#LOG -log_file="/data/remaster/logs/`date '+%Y-%m-%d'`.log" -log_mail_source="desinfect@email.clocal" -log_mail_smtp="smtp.mail.local:25" -log_mail_aim="6543@email.clocal" -log_mail_subject="Desinfect_Remaster" - -#Sonstiges -tools_list="xrdp clamav nano htop nmon iftop tmux dsniff nmap openssh-server tightvncserver rsync e2fsprogs foremost gddrescue recoverjpeg safecopy sleuthkit testdisk arp-scan" +#set functions +if [ -p "$rootdir/usr/lib/remaster/" ]; then + #source "$rootdir/usr/lib/remaster/" ... + export PATH="$rootdir/usr/lib/remaster/":$PATH +else + echo "ERROR functions not found" + exit 1 +fi +#read main setting +if [ -f "$rootdir/etc/remaster/config.cfg"]; then + source "$rootdir/etc/remaster/config.cfg" +else + if [ -f "$rootdir/etc/remaster/config.sample.cfg"]; then + source "$rootdir/etc/remaster/config.sample.cfg" + else + echo "ERROR config not found" + exit 1 + fi +fi ##################################################################################### ################## M o d e s ######################################################## diff --git a/src/web/index.html b/src/web/index.html new file mode 100644 index 0000000..e69de29 From 074b92b9844388affd548cca696d56a7422c4201 Mon Sep 17 00:00:00 2001 From: 6543 Date: Fri, 27 Apr 2018 09:33:02 +0200 Subject: [PATCH 05/38] smal fixes --- gendeb.sh | 1 + src/remaster.sh | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/gendeb.sh b/gendeb.sh index 11bd7ae..c984e1b 100755 --- a/gendeb.sh +++ b/gendeb.sh @@ -28,6 +28,7 @@ for i in dist functions mods; do done # setting +mkdir -p $rootdir/etc/remaster/ cp -v src/config.sample.cfg $rootdir/etc/remaster/config.sample.cfg diff --git a/src/remaster.sh b/src/remaster.sh index 0cddef8..454e261 100755 --- a/src/remaster.sh +++ b/src/remaster.sh @@ -9,7 +9,7 @@ ##################################################################################### #get base dir rootdir=`echo $0 | rev | cut -d "/" -f 2- | rev`/../../ -rootdir=`readlink -e $rootdir` +export "rootdir=`readlink -e $rootdir`"" #set functions if [ -p "$rootdir/usr/lib/remaster/" ]; then From be87936dc42bab45bf07ae250a9de50953119797 Mon Sep 17 00:00:00 2001 From: 6543 Date: Fri, 27 Apr 2018 14:01:08 +0200 Subject: [PATCH 06/38] 2018-04-05 --- src/remaster.sh | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/remaster.sh b/src/remaster.sh index 454e261..cb971ea 100755 --- a/src/remaster.sh +++ b/src/remaster.sh @@ -146,6 +146,11 @@ function main_renew() { #chroot $chroot_path /bin/bash #echo "Are You Finisch? Then Press [ENTER]" + #config xrdp to start xfce + echo '#!/bin/sh' > "$chroot_path"/etc/xrdp/startwm.sh + echo "export LANG=\"de_DE.UTF-8\"" >> "$chroot_path"/etc/xrdp/startwm.sh + echo "startxfce4" >> "$chroot_path"/etc/xrdp/startwm.sh + # 9. Umount - Chroot Umgebung auflösen chroot_umount$distro "$chroot_path" >> "$log_file" @@ -458,6 +463,7 @@ function main_update_iso() { chmod 666 "$iso_destination" "$filesystem_img" >> "$log_file" + #11. End workspace_erase "$iso_extr_dir/" "$chroot_path/" >> "$log_file" error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" @@ -799,12 +805,10 @@ function iso_create_desinfect2017() { function chroot_initial() { echo -n "initial chroot ... " - #$1 = chroot_dir - #check chroot dir chroot_dir="$1" [ -d "$chroot_dir" ] || { - echo "### ERROR ### chroot_initial: chroot directory not exist!" + echo "### ERROR ### chroot_initial: chroot directory not exist" return 12 } @@ -836,6 +840,7 @@ function chroot_initial_desinfect2015() { } #mount virus definitions + #bitdefender mount --bind $chroot_dir/opt/BitDefender-scanner/var/lib/scan{.orig,} mount --bind $chroot_dir/var/kl/bases_rd{.orig,} @@ -981,7 +986,7 @@ function chroot_sh() { #check chroot dir chroot_dir="$1" [ -d "$chroot_dir" ] || { - echo "### ERROR ### chroot_umount: chroot directory not exist!" + echo "### ERROR ### chroot_sh: chroot directory not exist!" return 12 } From aecc9d5b9cc4df0281004904c40c69572ca7bb4b Mon Sep 17 00:00:00 2001 From: 6543 Date: Sat, 28 Apr 2018 11:32:26 +0200 Subject: [PATCH 07/38] rename gendeb to autogen --- gendeb.sh => autogen.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename gendeb.sh => autogen.sh (100%) diff --git a/gendeb.sh b/autogen.sh similarity index 100% rename from gendeb.sh rename to autogen.sh From b5ab4f1ec94f4650996b5e4a80d70bdcbfa18b98 Mon Sep 17 00:00:00 2001 From: 6543 Date: Mon, 30 Apr 2018 18:12:45 +0200 Subject: [PATCH 08/38] - bugfix '"' - def lib-header --- doc/lib-header.txt | 6 ++++++ src/{functions => func}/chroot_clean | 0 src/{dist => proj}/desinfect17 | 0 src/{dist => proj}/ubuntu.16.04 | 0 src/remaster.sh | 3 ++- 5 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 doc/lib-header.txt rename src/{functions => func}/chroot_clean (100%) rename src/{dist => proj}/desinfect17 (100%) rename src/{dist => proj}/ubuntu.16.04 (100%) diff --git a/doc/lib-header.txt b/doc/lib-header.txt new file mode 100644 index 0000000..02f097a --- /dev/null +++ b/doc/lib-header.txt @@ -0,0 +1,6 @@ +#!/bin/bash +#remaster lib +[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } + +#beginn func diff --git a/src/functions/chroot_clean b/src/func/chroot_clean similarity index 100% rename from src/functions/chroot_clean rename to src/func/chroot_clean diff --git a/src/dist/desinfect17 b/src/proj/desinfect17 similarity index 100% rename from src/dist/desinfect17 rename to src/proj/desinfect17 diff --git a/src/dist/ubuntu.16.04 b/src/proj/ubuntu.16.04 similarity index 100% rename from src/dist/ubuntu.16.04 rename to src/proj/ubuntu.16.04 diff --git a/src/remaster.sh b/src/remaster.sh index cb971ea..c509da1 100755 --- a/src/remaster.sh +++ b/src/remaster.sh @@ -9,12 +9,13 @@ ##################################################################################### #get base dir rootdir=`echo $0 | rev | cut -d "/" -f 2- | rev`/../../ -export "rootdir=`readlink -e $rootdir`"" +export "rootdir=`readlink -e $rootdir`" #set functions if [ -p "$rootdir/usr/lib/remaster/" ]; then #source "$rootdir/usr/lib/remaster/" ... export PATH="$rootdir/usr/lib/remaster/":$PATH + export LIBDIR="$rootdir/usr/lib/remaster/" else echo "ERROR functions not found" exit 1 From f2b3b5f5303f0985b7d82c785ce90317144d81c5 Mon Sep 17 00:00:00 2001 From: 6543 Date: Mon, 30 Apr 2018 18:57:01 +0200 Subject: [PATCH 09/38] Split main func (no os/proj dependency) --- autogen.sh | 5 +- src/func/check_dependency | 16 ++ src/func/check_user | 13 ++ src/func/chroot_clean | 18 ++ src/func/chroot_initial | 27 +++ src/func/chroot_is_mounted | 18 ++ src/func/chroot_sh | 25 +++ src/func/chroot_umount | 27 +++ src/func/error_code | 61 +++++++ src/func/filesystem_extract | 44 +++++ src/func/filesystem_get_type | 11 ++ src/func/filesystem_pack | 33 ++++ src/func/iso_create | 27 +++ src/func/iso_extract | 48 +++++ src/func/on_exit | 30 +++ src/func/workspace_erase | 15 ++ src/remaster.sh | 341 ++--------------------------------- 17 files changed, 432 insertions(+), 327 deletions(-) create mode 100644 src/func/check_dependency create mode 100644 src/func/check_user create mode 100644 src/func/chroot_initial create mode 100644 src/func/chroot_is_mounted create mode 100644 src/func/chroot_sh create mode 100644 src/func/chroot_umount create mode 100644 src/func/error_code create mode 100644 src/func/filesystem_extract create mode 100644 src/func/filesystem_get_type create mode 100644 src/func/filesystem_pack create mode 100644 src/func/iso_create create mode 100644 src/func/iso_extract create mode 100644 src/func/on_exit create mode 100644 src/func/workspace_erase diff --git a/autogen.sh b/autogen.sh index c984e1b..30fe4ad 100755 --- a/autogen.sh +++ b/autogen.sh @@ -23,8 +23,9 @@ chmod +x $rootdir/usr/bin/remaster # modules mkdir -p $rootdir/usr/lib/remaster/ -for i in dist functions mods; do - cp -v src/$i/* $rootdir/usr/lib/remaster/ +for i in proj func mods; do + mkdir -p $rootdir/usr/lib/remaster/$i + cp -v src/$i/* $rootdir/usr/lib/remaster/$i/ done # setting diff --git a/src/func/check_dependency b/src/func/check_dependency new file mode 100644 index 0000000..f4d773c --- /dev/null +++ b/src/func/check_dependency @@ -0,0 +1,16 @@ +#!/bin/bash +#remaster lib +[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } + +#check_dependency +# -> 0 | -> 16 +function check_dependency() { + for packet in squashfs-tools xorriso wget sed sendemail; do + [ "`dpkg -l $packet 2>&1`" == "dpkg-query: Kein Paket gefunden, das auf $packet passt" ] && { + echo "### ERROR ### Packet $packet not installed" + return 16 + } + done + return 0 +} diff --git a/src/func/check_user b/src/func/check_user new file mode 100644 index 0000000..e12019a --- /dev/null +++ b/src/func/check_user @@ -0,0 +1,13 @@ +#!/bin/bash +#remaster lib +[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } + +#check_user +function check_user() { + #check root + [ "`whoami`" == "root" ] || { + echo "### ERROR ### Remaster need ROOT permision!" + return 10 + } +} diff --git a/src/func/chroot_clean b/src/func/chroot_clean index e69de29..1ea9543 100644 --- a/src/func/chroot_clean +++ b/src/func/chroot_clean @@ -0,0 +1,18 @@ +#!/bin/bash +#remaster lib +[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } + +#chroot_clean [chroot_dir] +function chroot_clean() { + echo "clean chroot ... " + + chroot_dir="$1" + + chroot "$chroot_dir" /bin/bash -c "apt-get clean" + chroot "$chroot_dir" /bin/bash -c "rm -r /var/cache/apt/*" + chroot "$chroot_dir" /bin/bash -c "apt-get update" + chroot "$chroot_dir" /bin/bash -c "apt-get check" + + echo "done" +} diff --git a/src/func/chroot_initial b/src/func/chroot_initial new file mode 100644 index 0000000..c341464 --- /dev/null +++ b/src/func/chroot_initial @@ -0,0 +1,27 @@ +#!/bin/bash +#remaster lib +[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } + +#chroot_initial [chroot_dir] +function chroot_initial() { + echo -n "initial chroot ... " + + #check chroot dir + chroot_dir="$1" + [ -d "$chroot_dir" ] || { + echo "### ERROR ### chroot_initial: chroot directory not exist" + return 12 + } + + #mount virus definitions + mount -t tmpfs tmpfs "$chroot_dir/tmp" + mount -t tmpfs tmpfs "$chroot_dir/root" + mount --bind /dev "$chroot_dir/dev" + mount --bind /proc "$chroot_dir/proc" + + rm "$chroot_dir/etc/resolv.conf" + cp "/etc/resolv.conf" "$chroot_dir/etc/resolv.conf" + + echo "done" +} diff --git a/src/func/chroot_is_mounted b/src/func/chroot_is_mounted new file mode 100644 index 0000000..8f46f45 --- /dev/null +++ b/src/func/chroot_is_mounted @@ -0,0 +1,18 @@ +#!/bin/bash +#remaster lib +[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } + +#chroot_is_mounted [chroot_dir] +#(Boolean)-> true | false +function chroot_is_mounted() { + #$1 = chroot directory + + if [ "`mount | grep "$1"`" != "" ] ; then + #ther is smething mounted + echo "true" + else + #nothing mounted + echo "false" + fi +} diff --git a/src/func/chroot_sh b/src/func/chroot_sh new file mode 100644 index 0000000..9055051 --- /dev/null +++ b/src/func/chroot_sh @@ -0,0 +1,25 @@ +#!/bin/bash +#remaster lib +[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } + +#chroot_sh [chroot_dir] [command] +function chroot_sh() { + #check chroot dir + chroot_dir="$1" + [ -d "$chroot_dir" ] || { + echo "### ERROR ### chroot_sh: chroot directory not exist!" + return 12 + } + + command="$2" + + [ -f "$chroot_dir/tmp/env.sh" ] || { + #if not exist create environment skript + cat "$chroot_dir/etc/environment" | grep -v "#" | grep "=" > "$chroot_dir/tmp/env" + while read line; do echo export $line; done < "$chroot_dir/tmp/env" > "$chroot_dir/tmp/env.sh" + chmod +x "$chroot_dir/tmp/env.sh" && rm "$chroot_dir/tmp/env" + } + + chroot "$chroot_dir" /bin/bash --login -c ". /tmp/env.sh; $command" +} diff --git a/src/func/chroot_umount b/src/func/chroot_umount new file mode 100644 index 0000000..613998b --- /dev/null +++ b/src/func/chroot_umount @@ -0,0 +1,27 @@ +#!/bin/bash +#remaster lib +[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } + +#chroot_umount [chroot_dir] +function chroot_umount() { + echo -n "unmount chroot ... " + + #check chroot dir + chroot_dir="$1" + [ -d "$chroot_dir" ] || { + echo "### ERROR ### chroot_umount: chroot directory not exist!" + return 12 + } + + for d in "$chroot_dir/tmp" "$chroot_dir/root" "$chroot_dir/proc" "$chroot_dir/dev" ; do + umount $d + retval=$? + [ "$retval" -gt 0 ] && { + echo "### ERROR ### chroot_umount: can't umount \"$d\"!" + return 21 + } + done + + echo "done" +} diff --git a/src/func/error_code b/src/func/error_code new file mode 100644 index 0000000..a150e8b --- /dev/null +++ b/src/func/error_code @@ -0,0 +1,61 @@ +#!/bin/bash +#remaster lib +[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } + +#error_code [error_level] +function error_code() { + code="$1" + case $code in + "") + echo $'ID:\tDescription\n----------------------------------------------------\n1\tAllgemeiner Fehler\n2\tNo Paramters / wrong parameters' + echo $'3\tWrong Settings\n4\tProgramm missing\n\n10\tno root\n11\tfile no found\n12\tdir not found\n13\tcant create/delete file/dir' + echo $'14\tcorrupt file (unsquashfs, mount iso, ...)\n15\twrong file (iso has no squashfs-file ...)\n16\trequired Packet not found\n\n20\tmount error\n21\tunmoun error\n22\twrong filesystem' + ;; + 1) + echo "Allgemeiner Fehler" + ;; + 2) + echo "No Paramters / wrong parameters" + ;; + 3) + echo "Wrong Settings" + ;; + 4) + echo "Programm missing" + ;; + 10) + echo "not executed as Root" + ;; + 11) + echo "file no found" + ;; + 12) + echo "dir not found" + ;; + 13) + echo "cant create/delete file/dir" + ;; + 14) + echo "corrupt file (unsquashfs, mount iso, ...)" + ;; + 15) + echo "wrong file (iso has no squashfs-file ...)" + ;; + 16) + echo "required Packet not found" + ;; + 20) + echo "tmount error" + ;; + 21) + echo "unmoun error" + ;; + 22) + echo "wrong filesystem" + ;; + *) + echo $'No Defined Error Code.\nPerhaps an Error ocure on a Command wich was started by this Skritp.' + ;; + esac +} diff --git a/src/func/filesystem_extract b/src/func/filesystem_extract new file mode 100644 index 0000000..9c86de2 --- /dev/null +++ b/src/func/filesystem_extract @@ -0,0 +1,44 @@ +#!/bin/bash +#remaster lib +[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } + +#filesystem_extract [filesystem_img_source] [chroot_path] +function filesystem_extract() { + echo "extract filesystem ..." + + #$1 = filesystem_img_source + #$2 = chroot_path + filesystem_img_source="$1" + chroot_path="$2" + filesystem_log="`mktemp`" + + #Überfrüfen der Parameter + [ -f "$filesystem_img_source" ] || { + echo "### ERROR ### filesystem_extract: squashfs \"$filesystem_img_source\" not exist!" + return 11 + } + + [ "`mkdir -p "$chroot_path"`" != "" ] && { + echo "### ERROR ### filesystem_extract: chroot_path \"$chroot_path\" can't create!" + return 13 + } + + [ "`filesystem_get_type $chroot_path`" != "ext4" ] && [ "`filesystem_get_type $chroot_path`" != "btrfs" ] && { + echo "### ERROR ### filesystem_extract: wrong filesystem (`filesystem_get_type $chroot_path`)!" + return 22 + } + + rm -r "$chroot_path" + + #eigendliches entpacken + unsquashfs -d "$chroot_path" "$filesystem_img_source" > "$filesystem_log" || { + echo "### ERROR ### filesystem_extract: unsquashfs failed!" + return 14 + } + + grep -v "\[" "$filesystem_log" + rm "$filesystem_log" + + echo "done" +} diff --git a/src/func/filesystem_get_type b/src/func/filesystem_get_type new file mode 100644 index 0000000..927ee8f --- /dev/null +++ b/src/func/filesystem_get_type @@ -0,0 +1,11 @@ +#!/bin/bash +#remaster lib +[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } + +#filesystem_get_type [dir] +#(String)-> ext4, ext2, btfs, fuse, ... +function filesystem_get_type() { + fs_aTemp=(`df -T "$1"`) + echo ${fs_aTemp[9]} +} diff --git a/src/func/filesystem_pack b/src/func/filesystem_pack new file mode 100644 index 0000000..884498e --- /dev/null +++ b/src/func/filesystem_pack @@ -0,0 +1,33 @@ +#!/bin/bash +#remaster lib +[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } + +#filesystem_pack [chroot_path] [filesystem_img_destination] +function filesystem_pack() { + echo "pack filesystem ..." + + #$1 = chroot_path + #$2 = filesystem_img_destination + chroot_path="$1" + filesystem_img_destination="$2" + filesystem_log="`mktemp`" + + #Überfrüfen der Parameter + [ -d "$chroot_path" ] || { + echo "### ERROR ### filesystem_extract: chroot_path \"$chroot_path\" not exist!" + return 12 + } + + #loslegen ... + rm -f "$filesystem_img_destination" + mksquashfs "$chroot_path" "$filesystem_img_destination" > "$filesystem_log" || { + echo "### ERROR ### filesystem_pack: mksquashfs failed!" + return 13 + } + + grep -v "\[" "$filesystem_log" + rm "$filesystem_log" + + echo "done" +} diff --git a/src/func/iso_create b/src/func/iso_create new file mode 100644 index 0000000..ba58400 --- /dev/null +++ b/src/func/iso_create @@ -0,0 +1,27 @@ +#!/bin/bash +#remaster lib +[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } + +#iso_create [chroot_path] [iso_extr_dir] [iso_destination] [iso_lable] +function iso_create() { + echo -n "create iso ..." + + chroot_path="$1" + iso_extr_dir="$2" + iso_destination="$3" + iso_lable="$4" + + [ -e "$iso_destination" ] && rm "$iso_destination" + + xorriso -as mkisofs -graft-points -c isolinux/boot.cat -b isolinux/isolinux.bin \ + -no-emul-boot -boot-info-table -boot-load-size 4 -isohybrid-mbr \ + "$iso_extr_dir/isolinux/isolinux.bin" \ + -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot \ + -isohybrid-gpt-basdat -V "$iso_lable" \ + -o "$iso_destination" \ + -r -J "$iso_extr_dir" \ + --sort-weight 0 / --sort-weight 2 /boot --sort-weight 1 /isolinux + + echo "done" +} diff --git a/src/func/iso_extract b/src/func/iso_extract new file mode 100644 index 0000000..3d6dd75 --- /dev/null +++ b/src/func/iso_extract @@ -0,0 +1,48 @@ +#!/bin/bash +#remaster lib +[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } + +#iso_extract [iso_source] [iso_extr_dir] +function iso_extract() { + echo -n "extract iso ... " + + #$1 = iso_source + #$2 = iso_extr_dir + + #check root + [ "`whoami`" == "root" ] || { + echo "### ERROR ### iso_extract: need root permision!" + return 10 + } + + iso_source="$1" + [ -f "$iso_source" ] || { + echo "### ERROR ### iso_extract: ISO \"$iso_source\" not exist!" + return 11 + } + + iso_extr_dir="$2" + [ -d "$iso_extr_dir" ] || { + echo "### ERROR ### iso_extract: aim directory not exist!" + return 12 + } + + #mace tmp mountpoint + tmpdir="`mktemp -d`" + [ -d "$iso_extr_dir" ] && { + rm -r "$iso_extr_dir/" + mkdir "$iso_extr_dir" + } + + #copy files ... + mount -o loop,ro "$iso_source" "$tmpdir" + cp -f -r "$tmpdir/"* "$iso_extr_dir" + + #clear tmp mountpoint + umount "$iso_source" + rm -r "$tmpdir" + tmpdir= + + echo "done" +} diff --git a/src/func/on_exit b/src/func/on_exit new file mode 100644 index 0000000..9c2bcb6 --- /dev/null +++ b/src/func/on_exit @@ -0,0 +1,30 @@ +#!/bin/bash +#remaster lib +[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } + +#on_exit [error_level] +function on_exit() { + #send log and errorlevel[success/errorr xy] + + if [ "$1" != "0" ]; then + log_mail_subject="$log_mail_subject [ERROR]" + else + log_mail_subject="$log_mail_subject [Success]" + fi + + #Mail Body: + for mail_aim in `echo "$log_mail_aim" | tr "," " "`; do + { + echo "$log_mail_subject" + echo $'####################################################################################\n\n' + cat "$log_file" + } | sendemail -s "$log_mail_smtp" -f "$log_mail_source" -t "$mail_aim" -u "$log_mail_subject" -o tls=no + done + + [ "$1" != "0" ] && { + chroot_umount$distro "$chroot_path" 2> /dev/null + workspace_erase "$iso_extr_dir/" "$chroot_path/" 2> /dev/null + } + exit $1 +} diff --git a/src/func/workspace_erase b/src/func/workspace_erase new file mode 100644 index 0000000..004f8b5 --- /dev/null +++ b/src/func/workspace_erase @@ -0,0 +1,15 @@ +#!/bin/bash +#remaster lib +[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } + +#workspace_erase [workspace_path] +function workspace_erase() { + echo -n "erase workspace ... " + + for dir in "$@"; do + [ -d "$dir" ] && rm -r -f "$dir" + done + + echo "done" +} diff --git a/src/remaster.sh b/src/remaster.sh index c509da1..a711897 100755 --- a/src/remaster.sh +++ b/src/remaster.sh @@ -14,7 +14,6 @@ export "rootdir=`readlink -e $rootdir`" #set functions if [ -p "$rootdir/usr/lib/remaster/" ]; then #source "$rootdir/usr/lib/remaster/" ... - export PATH="$rootdir/usr/lib/remaster/":$PATH export LIBDIR="$rootdir/usr/lib/remaster/" else echo "ERROR functions not found" @@ -477,11 +476,6 @@ function main_update() { main_update_pxe } -#remaster.sh error_code [error_level] -function main_error_code() { - error_code $1 -} - ##################################################################################### ################## F u n c t i o n s ################################################ ##################################################################################### @@ -489,268 +483,44 @@ function main_error_code() { ### Error Handlings ### #on_exit [error_level] -function on_exit() { - #send log and errorlevel[success/errorr xy] - - if [ "$1" != "0" ]; then - log_mail_subject="$log_mail_subject [ERROR]" - else - log_mail_subject="$log_mail_subject [Success]" - fi - - #Mail Body: - for mail_aim in `echo "$log_mail_aim" | tr "," " "`; do - { - echo "$log_mail_subject" - echo $'####################################################################################\n\n' - cat "$log_file" - } | sendemail -s "$log_mail_smtp" -f "$log_mail_source" -t "$mail_aim" -u "$log_mail_subject" -o tls=no - done - - [ "$1" != "0" ] && { - chroot_umount$distro "$chroot_path" 2> /dev/null - workspace_erase "$iso_extr_dir/" "$chroot_path/" 2> /dev/null - } - exit $1 -} +source $LIBDR/func/on_exit #error_code [error_level] -function error_code() { - code="$1" - case $code in - "") - echo $'ID:\tDescription\n----------------------------------------------------\n1\tAllgemeiner Fehler\n2\tNo Paramters / wrong parameters' - echo $'3\tWrong Settings\n4\tProgramm missing\n\n10\tno root\n11\tfile no found\n12\tdir not found\n13\tcant create/delete file/dir' - echo $'14\tcorrupt file (unsquashfs, mount iso, ...)\n15\twrong file (iso has no squashfs-file ...)\n16\trequired Packet not found\n\n20\tmount error\n21\tunmoun error\n22\twrong filesystem' - ;; - 1) - echo "Allgemeiner Fehler" - ;; - 2) - echo "No Paramters / wrong parameters" - ;; - 3) - echo "Wrong Settings" - ;; - 4) - echo "Programm missing" - ;; - 10) - echo "not executed as Root" - ;; - 11) - echo "file no found" - ;; - 12) - echo "dir not found" - ;; - 13) - echo "cant create/delete file/dir" - ;; - 14) - echo "corrupt file (unsquashfs, mount iso, ...)" - ;; - 15) - echo "wrong file (iso has no squashfs-file ...)" - ;; - 16) - echo "required Packet not found" - ;; - 20) - echo "tmount error" - ;; - 21) - echo "unmoun error" - ;; - 22) - echo "wrong filesystem" - ;; - *) - echo $'No Defined Error Code.\nPerhaps an Error ocure on a Command wich was started by this Skritp.' - ;; - esac -} +source $LIBDR/func/error_code #check_user -function check_user() { - #check root - [ "`whoami`" == "root" ] || { - echo "### ERROR ### Remaster need ROOT permision!" - return 10 - } -} +source $LIBDR/func/check_user #check_dependency -function check_dependency() { - for packet in squashfs-tools xorriso wget sed sendemail; do - [ "`dpkg -l $packet 2>&1`" == "dpkg-query: Kein Paket gefunden, das auf $packet passt" ] && { - echo "### ERROR ### Packet $packet not installed" - return 16 - } - done - return 0 -} +# -> 0 | -> 16 +source $LIBDR/func/check_dependency ### Workspace ### #workspace_erase [workspace_path] -function workspace_erase() { - echo -n "erase workspace ... " +source $LIBDR/func/workspace_erase - for dir in "$@"; do - [ -d "$dir" ] && rm -r -f "$dir" - done - - echo "done" -} ### Filesystem ### #filesystem_extract [filesystem_img_source] [chroot_path] -function filesystem_extract() { - echo "extract filesystem ..." - - #$1 = filesystem_img_source - #$2 = chroot_path - filesystem_img_source="$1" - chroot_path="$2" - filesystem_log="`mktemp`" - - #Überfrüfen der Parameter - [ -f "$filesystem_img_source" ] || { - echo "### ERROR ### filesystem_extract: squashfs \"$filesystem_img_source\" not exist!" - return 11 - } - - [ "`mkdir -p "$chroot_path"`" != "" ] && { - echo "### ERROR ### filesystem_extract: chroot_path \"$chroot_path\" can't create!" - return 13 - } - - [ "`filesystem_get_type $chroot_path`" != "ext4" ] && [ "`filesystem_get_type $chroot_path`" != "btrfs" ] && { - echo "### ERROR ### filesystem_extract: wrong filesystem (`filesystem_get_type $chroot_path`)!" - return 22 - } - - rm -r "$chroot_path" - - #eigendliches entpacken - unsquashfs -d "$chroot_path" "$filesystem_img_source" > "$filesystem_log" || { - echo "### ERROR ### filesystem_extract: unsquashfs failed!" - return 14 - } - - grep -v "\[" "$filesystem_log" - rm "$filesystem_log" - - echo "done" -} +source $LIBDR/func/filesystem_extract #filesystem_pack [chroot_path] [filesystem_img_destination] -function filesystem_pack() { - echo "pack filesystem ..." - - #$1 = chroot_path - #$2 = filesystem_img_destination - chroot_path="$1" - filesystem_img_destination="$2" - filesystem_log="`mktemp`" - - #Überfrüfen der Parameter - [ -d "$chroot_path" ] || { - echo "### ERROR ### filesystem_extract: chroot_path \"$chroot_path\" not exist!" - return 12 - } - - #loslegen ... - rm -f "$filesystem_img_destination" - mksquashfs "$chroot_path" "$filesystem_img_destination" > "$filesystem_log" || { - echo "### ERROR ### filesystem_pack: mksquashfs failed!" - return 13 - } - - grep -v "\[" "$filesystem_log" - rm "$filesystem_log" - - echo "done" -} +source $LIBDR/func/filesystem_pack #filesystem_get_type [dir] #(String)-> ext4, ext2, btfs, fuse, ... -function filesystem_get_type() { - fs_aTemp=(`df -T "$1"`) - echo ${fs_aTemp[9]} -} +source $LIBDR/func/filesystem_get_type ### ISO ### #iso_extract [iso_source] [iso_extr_dir] -function iso_extract() { - echo -n "extract iso ... " - - #$1 = iso_source - #$2 = iso_extr_dir - - #check root - [ "`whoami`" == "root" ] || { - echo "### ERROR ### iso_extract: need root permision!" - return 10 - } - - iso_source="$1" - [ -f "$iso_source" ] || { - echo "### ERROR ### iso_extract: ISO \"$iso_source\" not exist!" - return 11 - } - - iso_extr_dir="$2" - [ -d "$iso_extr_dir" ] || { - echo "### ERROR ### iso_extract: aim directory not exist!" - return 12 - } - - #mace tmp mountpoint - tmpdir="`mktemp -d`" - [ -d "$iso_extr_dir" ] && { - rm -r "$iso_extr_dir/" - mkdir "$iso_extr_dir" - } - - #copy files ... - mount -o loop,ro "$iso_source" "$tmpdir" - cp -f -r "$tmpdir/"* "$iso_extr_dir" - - #clear tmp mountpoint - umount "$iso_source" - rm -r "$tmpdir" - tmpdir= - - echo "done" -} +source $LIBDR/func/iso_extract #iso_create [chroot_path] [iso_extr_dir] [iso_destination] [iso_lable] -function iso_create() { - echo -n "create iso ..." - - chroot_path="$1" - iso_extr_dir="$2" - iso_destination="$3" - iso_lable="$4" - - [ -e "$iso_destination" ] && rm "$iso_destination" - - xorriso -as mkisofs -graft-points -c isolinux/boot.cat -b isolinux/isolinux.bin \ - -no-emul-boot -boot-info-table -boot-load-size 4 -isohybrid-mbr \ - "$iso_extr_dir/isolinux/isolinux.bin" \ - -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot \ - -isohybrid-gpt-basdat -V "$iso_lable" \ - -o "$iso_destination" \ - -r -J "$iso_extr_dir" \ - --sort-weight 0 / --sort-weight 2 /boot --sort-weight 1 /isolinux - - echo "done" -} +source $LIBDR/func/iso_create #iso_create_desinfect2015 [chroot_path] [iso_extr_dir] [iso_destination] [iso_lable] function iso_create_desinfect2015() { @@ -803,27 +573,7 @@ function iso_create_desinfect2017() { ### chroot ### #chroot_initial [chroot_dir] -function chroot_initial() { - echo -n "initial chroot ... " - - #check chroot dir - chroot_dir="$1" - [ -d "$chroot_dir" ] || { - echo "### ERROR ### chroot_initial: chroot directory not exist" - return 12 - } - - #mount virus definitions - mount -t tmpfs tmpfs "$chroot_dir/tmp" - mount -t tmpfs tmpfs "$chroot_dir/root" - mount --bind /dev "$chroot_dir/dev" - mount --bind /proc "$chroot_dir/proc" - - rm "$chroot_dir/etc/resolv.conf" - cp "/etc/resolv.conf" "$chroot_dir/etc/resolv.conf" - - echo "done" -} +source $LIBDR/func/chroot_initial #chroot_initial_desinfect2015 [chroot_dir] function chroot_initial_desinfect2015() { @@ -879,41 +629,10 @@ function chroot_initial_desinfect2017() { #chroot_clean [chroot_dir] -function chroot_clean() { - echo "clean chroot ... " - - chroot_dir="$1" - - chroot "$chroot_dir" /bin/bash -c "apt-get clean" - chroot "$chroot_dir" /bin/bash -c "rm -r /var/cache/apt/*" - chroot "$chroot_dir" /bin/bash -c "apt-get update" - chroot "$chroot_dir" /bin/bash -c "apt-get check" - - echo "done" -} +source $LIBDR/func/chroot_clean #chroot_umount [chroot_dir] -function chroot_umount() { - echo -n "unmount chroot ... " - - #check chroot dir - chroot_dir="$1" - [ -d "$chroot_dir" ] || { - echo "### ERROR ### chroot_umount: chroot directory not exist!" - return 12 - } - - for d in "$chroot_dir/tmp" "$chroot_dir/root" "$chroot_dir/proc" "$chroot_dir/dev" ; do - umount $d - retval=$? - [ "$retval" -gt 0 ] && { - echo "### ERROR ### chroot_umount: can't umount \"$d\"!" - return 21 - } - done - - echo "done" -} +source $LIBDR/func/chroot_umount #chroot_umount_desinfect2015 [chroot_dir] function chroot_umount_desinfect2015() { @@ -970,38 +689,10 @@ function chroot_umount_desinfect2017() { #chroot_is_mounted [chroot_dir] #(Boolean)-> true | false -function chroot_is_mounted() { - #$1 = chroot directory - - if [ "`mount | grep "$1"`" != "" ] ; then - #ther is smething mounted - echo "true" - else - #nothing mounted - echo "false" - fi -} +source $LIBDR/func/chroot_is_mounted #chroot_sh [chroot_dir] [command] -function chroot_sh() { - #check chroot dir - chroot_dir="$1" - [ -d "$chroot_dir" ] || { - echo "### ERROR ### chroot_sh: chroot directory not exist!" - return 12 - } - - command="$2" - - [ -f "$chroot_dir/tmp/env.sh" ] || { - #if not exist create environment skript - cat "$chroot_dir/etc/environment" | grep -v "#" | grep "=" > "$chroot_dir/tmp/env" - while read line; do echo export $line; done < "$chroot_dir/tmp/env" > "$chroot_dir/tmp/env.sh" - chmod +x "$chroot_dir/tmp/env.sh" && rm "$chroot_dir/tmp/env" - } - - chroot "$chroot_dir" /bin/bash --login -c ". /tmp/env.sh; $command" -} +source $LIBDR/func/chroot_sh ### Settings ### ### proxy From 838a1e709afe66867ecee180b0bca1c602a46a13 Mon Sep 17 00:00:00 2001 From: 6543 Date: Sun, 6 May 2018 19:26:21 +0200 Subject: [PATCH 10/38] source cant use variables (p1) --- autogen.sh | 48 ++++++++++++++++------- doc/buid_vars.md | 12 ++++++ src/func/check_dependency | 4 +- src/func/check_user | 4 +- src/func/chroot_clean | 4 +- src/func/chroot_initial | 4 +- src/func/chroot_is_mounted | 4 +- src/func/chroot_sh | 4 +- src/func/chroot_umount | 4 +- src/func/error_code | 4 +- src/func/filesystem_extract | 4 +- src/func/filesystem_get_type | 4 +- src/func/filesystem_pack | 4 +- src/func/iso_create | 4 +- src/func/iso_extract | 4 +- src/func/on_exit | 4 +- src/func/workspace_erase | 4 +- src/proj/debian | 40 +++++++++++++++++++ src/proj/desinfect.17 | 10 +++++ src/proj/desinfect17 | 0 src/proj/ubuntu | 12 ++++++ src/proj/ubuntu.16.04 | 10 +++++ src/remaster.sh | 75 ++++++++++++------------------------ 23 files changed, 172 insertions(+), 95 deletions(-) create mode 100644 doc/buid_vars.md create mode 100644 src/proj/debian create mode 100644 src/proj/desinfect.17 delete mode 100644 src/proj/desinfect17 create mode 100644 src/proj/ubuntu diff --git a/autogen.sh b/autogen.sh index 30fe4ad..181dc9a 100755 --- a/autogen.sh +++ b/autogen.sh @@ -1,14 +1,18 @@ #!/bin/bash # at the moment only generate dir structure in /build -##################### -## setup build dir ## -##################### +#################### +## set enviroment ## +#################### -rootdir=build +[ -n "$1" ] && mode=debug +# install | clean | debug + +case +ROOTDIR=build echo "clear build" -[ -d $rootdir ] && rm -v -R $rootdir -mkdir $rootdir +[ -d $ROOTDIR ] && rm -v -R $ROOTDIR +mkdir $ROOTDIR ###################### ## skripte copieren ## @@ -17,20 +21,20 @@ mkdir $rootdir echo "copy files" # remaster -mkdir -p $rootdir/usr/bin/ -cp -v src/remaster.sh $rootdir/usr/bin/remaster -chmod +x $rootdir/usr/bin/remaster +mkdir -p $ROOTDIR/usr/bin/ +cp -v src/remaster.sh $ROOTDIR/usr/bin/remaster +chmod +x $ROOTDIR/usr/bin/remaster # modules -mkdir -p $rootdir/usr/lib/remaster/ +mkdir -p $ROOTDIR/usr/lib/remaster/ for i in proj func mods; do - mkdir -p $rootdir/usr/lib/remaster/$i - cp -v src/$i/* $rootdir/usr/lib/remaster/$i/ + mkdir -p $ROOTDIR/usr/lib/remaster/$i + cp -v src/$i/* $ROOTDIR/usr/lib/remaster/$i/ done # setting -mkdir -p $rootdir/etc/remaster/ -cp -v src/config.sample.cfg $rootdir/etc/remaster/config.sample.cfg +mkdir -p $ROOTDIR/etc/remaster/ +cp -v src/config.sample.cfg $ROOTDIR/etc/remaster/config.sample.cfg # Pfade anpassen @@ -39,3 +43,19 @@ cp -v src/config.sample.cfg $rootdir/etc/remaster/config.sample.cfg #mkdeb... #not jet + + +case "$1" in + install) + install || exit 1 + ;; + clean) + clean || exit 1 + ;; + debug) + debug || exit 1 + ;; + *) + echo "Usage: install | clean | debug" + exit 1 +esac diff --git a/doc/buid_vars.md b/doc/buid_vars.md new file mode 100644 index 0000000..f9900cc --- /dev/null +++ b/doc/buid_vars.md @@ -0,0 +1,12 @@ +variablen, welche um zu funktionieren mit statischen pfaden +ausgetauscht werden müssen: + +remaster.sh + * + -(install)> "" + -(debug)> 'pwd'/build + +remaster.sh; /*/*; + * + -(install)> /usr/lib/remaster + -(debug)> 'pwd'/build/usr/lib/remaster diff --git a/src/func/check_dependency b/src/func/check_dependency index f4d773c..06b1c4f 100644 --- a/src/func/check_dependency +++ b/src/func/check_dependency @@ -1,7 +1,7 @@ #!/bin/bash #remaster lib -[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } +[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } #check_dependency # -> 0 | -> 16 diff --git a/src/func/check_user b/src/func/check_user index e12019a..7810111 100644 --- a/src/func/check_user +++ b/src/func/check_user @@ -1,7 +1,7 @@ #!/bin/bash #remaster lib -[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } +[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } #check_user function check_user() { diff --git a/src/func/chroot_clean b/src/func/chroot_clean index 1ea9543..485b8e0 100644 --- a/src/func/chroot_clean +++ b/src/func/chroot_clean @@ -1,7 +1,7 @@ #!/bin/bash #remaster lib -[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } +[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } #chroot_clean [chroot_dir] function chroot_clean() { diff --git a/src/func/chroot_initial b/src/func/chroot_initial index c341464..d4f9564 100644 --- a/src/func/chroot_initial +++ b/src/func/chroot_initial @@ -1,7 +1,7 @@ #!/bin/bash #remaster lib -[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } +[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } #chroot_initial [chroot_dir] function chroot_initial() { diff --git a/src/func/chroot_is_mounted b/src/func/chroot_is_mounted index 8f46f45..f5facc3 100644 --- a/src/func/chroot_is_mounted +++ b/src/func/chroot_is_mounted @@ -1,7 +1,7 @@ #!/bin/bash #remaster lib -[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } +[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } #chroot_is_mounted [chroot_dir] #(Boolean)-> true | false diff --git a/src/func/chroot_sh b/src/func/chroot_sh index 9055051..b475716 100644 --- a/src/func/chroot_sh +++ b/src/func/chroot_sh @@ -1,7 +1,7 @@ #!/bin/bash #remaster lib -[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } +[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } #chroot_sh [chroot_dir] [command] function chroot_sh() { diff --git a/src/func/chroot_umount b/src/func/chroot_umount index 613998b..1bfd582 100644 --- a/src/func/chroot_umount +++ b/src/func/chroot_umount @@ -1,7 +1,7 @@ #!/bin/bash #remaster lib -[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } +[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } #chroot_umount [chroot_dir] function chroot_umount() { diff --git a/src/func/error_code b/src/func/error_code index a150e8b..57a4a15 100644 --- a/src/func/error_code +++ b/src/func/error_code @@ -1,7 +1,7 @@ #!/bin/bash #remaster lib -[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } +[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } #error_code [error_level] function error_code() { diff --git a/src/func/filesystem_extract b/src/func/filesystem_extract index 9c86de2..ed448d8 100644 --- a/src/func/filesystem_extract +++ b/src/func/filesystem_extract @@ -1,7 +1,7 @@ #!/bin/bash #remaster lib -[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } +[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } #filesystem_extract [filesystem_img_source] [chroot_path] function filesystem_extract() { diff --git a/src/func/filesystem_get_type b/src/func/filesystem_get_type index 927ee8f..1bffba9 100644 --- a/src/func/filesystem_get_type +++ b/src/func/filesystem_get_type @@ -1,7 +1,7 @@ #!/bin/bash #remaster lib -[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } +[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } #filesystem_get_type [dir] #(String)-> ext4, ext2, btfs, fuse, ... diff --git a/src/func/filesystem_pack b/src/func/filesystem_pack index 884498e..a542012 100644 --- a/src/func/filesystem_pack +++ b/src/func/filesystem_pack @@ -1,7 +1,7 @@ #!/bin/bash #remaster lib -[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } +[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } #filesystem_pack [chroot_path] [filesystem_img_destination] function filesystem_pack() { diff --git a/src/func/iso_create b/src/func/iso_create index ba58400..d6087f4 100644 --- a/src/func/iso_create +++ b/src/func/iso_create @@ -1,7 +1,7 @@ #!/bin/bash #remaster lib -[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } +[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } #iso_create [chroot_path] [iso_extr_dir] [iso_destination] [iso_lable] function iso_create() { diff --git a/src/func/iso_extract b/src/func/iso_extract index 3d6dd75..122ad6d 100644 --- a/src/func/iso_extract +++ b/src/func/iso_extract @@ -1,7 +1,7 @@ #!/bin/bash #remaster lib -[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } +[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } #iso_extract [iso_source] [iso_extr_dir] function iso_extract() { diff --git a/src/func/on_exit b/src/func/on_exit index 9c2bcb6..40b6f34 100644 --- a/src/func/on_exit +++ b/src/func/on_exit @@ -1,7 +1,7 @@ #!/bin/bash #remaster lib -[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } +[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } #on_exit [error_level] function on_exit() { diff --git a/src/func/workspace_erase b/src/func/workspace_erase index 004f8b5..2ecb36e 100644 --- a/src/func/workspace_erase +++ b/src/func/workspace_erase @@ -1,7 +1,7 @@ #!/bin/bash #remaster lib -[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } +[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } #workspace_erase [workspace_path] function workspace_erase() { diff --git a/src/proj/debian b/src/proj/debian new file mode 100644 index 0000000..d19c8e8 --- /dev/null +++ b/src/proj/debian @@ -0,0 +1,40 @@ +#!/bin/bash +#remaster lib +[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } +#################################### +##### Base Template D E B I A N #### +#################################### +# . + + +#tools_add [chroot_dir] [tools_list] +function tools_add() { + echo "add tools ... " + #$1 = chroot directory + chroot_dir="$1" + tools_list="$2" + + chroot "$chroot_dir" /bin/bash -c "apt-get update" > /dev/null + [ "$?" == "0" ] && echo "apt-get update: success" + chroot "$chroot_dir" /bin/bash -c "apt-get install -y $tools_list" | grep -v "wird eingerichtet ..." | grep -v "Vormals nicht ausgewähltes Paket" | grep -v "Entpacken von" | grep -v "Holen: " | grep -v "Trigger für" | grep -v "update-alternatives:" + echo "done" +} + +#os_update [chroot_dir] +function os_update() { + echo "updating os ... " + #$1 = chroot directory + + chroot_dir="$1" + + chroot "$chroot_dir" /bin/bash -c "apt-get update" > /dev/null + [ "$?" == "0" ] && echo "apt-get update: success" + chroot "$chroot_dir" /bin/bash -c "apt-get dist-upgrade -y" | grep -v "wird eingerichtet ..." | grep -v "Vormals nicht ausgewähltes Paket" | grep -v "Entpacken von" | grep -v "Holen: " | grep -v "Trigger für" | grep -v "update-alternatives:" + chroot "$chroot_dir" /bin/bash -c "apt-get clean" + + echo "done" +} + +TEST="ja" +TEST2="ja" diff --git a/src/proj/desinfect.17 b/src/proj/desinfect.17 new file mode 100644 index 0000000..e3c35f4 --- /dev/null +++ b/src/proj/desinfect.17 @@ -0,0 +1,10 @@ +#!/bin/bash +#remaster lib +[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } + +#desinfect.17 +# . -Y ubuntu.16.04 -> ubuntu -> debian +source $LIBDIR/proj/ubuntu.16.04 + +TEST2="na" diff --git a/src/proj/desinfect17 b/src/proj/desinfect17 deleted file mode 100644 index e69de29..0000000 diff --git a/src/proj/ubuntu b/src/proj/ubuntu new file mode 100644 index 0000000..02653d2 --- /dev/null +++ b/src/proj/ubuntu @@ -0,0 +1,12 @@ +#!/bin/bash +#remaster lib +[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } + +#################################### +##### Base Template U B U N T U #### +#################################### +# . -> debian +source $LIBDIR/proj/debian + +TEST2="jaUb" diff --git a/src/proj/ubuntu.16.04 b/src/proj/ubuntu.16.04 index e69de29..5619a3f 100644 --- a/src/proj/ubuntu.16.04 +++ b/src/proj/ubuntu.16.04 @@ -0,0 +1,10 @@ +#!/bin/bash +#remaster lib +[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" +[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } + +#ubuntu.16.04 +# . -> ubuntu -> debian +source $LIBDIR/proj/ubuntu + +TEST2="jaUBU" diff --git a/src/remaster.sh b/src/remaster.sh index a711897..146190b 100755 --- a/src/remaster.sh +++ b/src/remaster.sh @@ -7,25 +7,19 @@ ##################################################################################### ################## S e t t i n g s ################################################## ##################################################################################### -#get base dir -rootdir=`echo $0 | rev | cut -d "/" -f 2- | rev`/../../ -export "rootdir=`readlink -e $rootdir`" #set functions -if [ -p "$rootdir/usr/lib/remaster/" ]; then - #source "$rootdir/usr/lib/remaster/" ... - export LIBDIR="$rootdir/usr/lib/remaster/" -else +[ -d "" ] || { echo "ERROR functions not found" exit 1 -fi +} #read main setting -if [ -f "$rootdir/etc/remaster/config.cfg"]; then - source "$rootdir/etc/remaster/config.cfg" +if [ -f "/etc/remaster/config.cfg"]; then + source "/etc/remaster/config.cfg" else - if [ -f "$rootdir/etc/remaster/config.sample.cfg"]; then - source "$rootdir/etc/remaster/config.sample.cfg" + if [ -f "/etc/remaster/config.sample.cfg"]; then + source "/etc/remaster/config.sample.cfg" else echo "ERROR config not found" exit 1 @@ -483,44 +477,44 @@ function main_update() { ### Error Handlings ### #on_exit [error_level] -source $LIBDR/func/on_exit +source /func/on_exit #error_code [error_level] -source $LIBDR/func/error_code +source /func/error_code #check_user -source $LIBDR/func/check_user +source /func/check_user #check_dependency # -> 0 | -> 16 -source $LIBDR/func/check_dependency +source /func/check_dependency ### Workspace ### #workspace_erase [workspace_path] -source $LIBDR/func/workspace_erase +source /func/workspace_erase ### Filesystem ### #filesystem_extract [filesystem_img_source] [chroot_path] -source $LIBDR/func/filesystem_extract +source /func/filesystem_extract #filesystem_pack [chroot_path] [filesystem_img_destination] -source $LIBDR/func/filesystem_pack +source /func/filesystem_pack #filesystem_get_type [dir] #(String)-> ext4, ext2, btfs, fuse, ... -source $LIBDR/func/filesystem_get_type +source /func/filesystem_get_type ### ISO ### #iso_extract [iso_source] [iso_extr_dir] -source $LIBDR/func/iso_extract +source /func/iso_extract #iso_create [chroot_path] [iso_extr_dir] [iso_destination] [iso_lable] -source $LIBDR/func/iso_create +source /func/iso_create #iso_create_desinfect2015 [chroot_path] [iso_extr_dir] [iso_destination] [iso_lable] function iso_create_desinfect2015() { @@ -573,7 +567,7 @@ function iso_create_desinfect2017() { ### chroot ### #chroot_initial [chroot_dir] -source $LIBDR/func/chroot_initial +source /func/chroot_initial #chroot_initial_desinfect2015 [chroot_dir] function chroot_initial_desinfect2015() { @@ -629,10 +623,10 @@ function chroot_initial_desinfect2017() { #chroot_clean [chroot_dir] -source $LIBDR/func/chroot_clean +source /func/chroot_clean #chroot_umount [chroot_dir] -source $LIBDR/func/chroot_umount +source /func/chroot_umount #chroot_umount_desinfect2015 [chroot_dir] function chroot_umount_desinfect2015() { @@ -689,10 +683,10 @@ function chroot_umount_desinfect2017() { #chroot_is_mounted [chroot_dir] #(Boolean)-> true | false -source $LIBDR/func/chroot_is_mounted +source /func/chroot_is_mounted #chroot_sh [chroot_dir] [command] -source $LIBDR/func/chroot_sh +source /func/chroot_sh ### Settings ### ### proxy @@ -1100,19 +1094,7 @@ function sourcelist_desinfect_set_extendet2017() { ### Update ### #os_update [chroot_dir] -function os_update() { - echo "updating os ... " - #$1 = chroot directory - - chroot_dir="$1" - - chroot "$chroot_dir" /bin/bash -c "apt-get update" > /dev/null - [ "$?" == "0" ] && echo "apt-get update: success" - chroot "$chroot_dir" /bin/bash -c "apt-get dist-upgrade -y" | grep -v "wird eingerichtet ..." | grep -v "Vormals nicht ausgewähltes Paket" | grep -v "Entpacken von" | grep -v "Holen: " | grep -v "Trigger für" | grep -v "update-alternatives:" - chroot "$chroot_dir" /bin/bash -c "apt-get clean" - - echo "done" -} +#-> proj/debian #os_update_desinfect2015 [chroot_dir] function os_update_desinfect2015() { @@ -1332,17 +1314,7 @@ function os_update_desinfect2017() { ### Tools ### #tools_add [chroot_dir] [tools_list] -function tools_add() { - echo "add tools ... " - #$1 = chroot directory - chroot_dir="$1" - tools_list="$2" - - chroot "$chroot_dir" /bin/bash -c "apt-get update" > /dev/null - [ "$?" == "0" ] && echo "apt-get update: success" - chroot "$chroot_dir" /bin/bash -c "apt-get install -y $tools_list" | grep -v "wird eingerichtet ..." | grep -v "Vormals nicht ausgewähltes Paket" | grep -v "Entpacken von" | grep -v "Holen: " | grep -v "Trigger für" | grep -v "update-alternatives:" - echo "done" -} +#-> proj/debian #tools_add_desinfect2015 [chroot_dir] [tools_list] function tools_add_desinfect2015() { @@ -1377,6 +1349,7 @@ function tools_add_desinfect2017() { sourcelist_desinfect_set_nomal2017 "$chroot_dir" } +source /proj/desinfect.17 ### Handle Parameters & Modes ### From 4b9bbe22af5ce451de1b7558687c92301b29955d Mon Sep 17 00:00:00 2001 From: 6543 Date: Sun, 6 May 2018 19:31:13 +0200 Subject: [PATCH 11/38] atom-beautify --- src/remaster.sh | 1752 +++++++++++++++++++++++------------------------ 1 file changed, 876 insertions(+), 876 deletions(-) diff --git a/src/remaster.sh b/src/remaster.sh index 146190b..bae0df4 100755 --- a/src/remaster.sh +++ b/src/remaster.sh @@ -10,20 +10,20 @@ #set functions [ -d "" ] || { - echo "ERROR functions not found" - exit 1 + echo "ERROR functions not found" + exit 1 } #read main setting if [ -f "/etc/remaster/config.cfg"]; then - source "/etc/remaster/config.cfg" + source "/etc/remaster/config.cfg" else - if [ -f "/etc/remaster/config.sample.cfg"]; then - source "/etc/remaster/config.sample.cfg" - else - echo "ERROR config not found" - exit 1 - fi + if [ -f "/etc/remaster/config.sample.cfg"]; then + source "/etc/remaster/config.sample.cfg" + else + echo "ERROR config not found" + exit 1 + fi fi ##################################################################################### @@ -33,441 +33,441 @@ fi #remaster.sh renew function main_renew() { - [ -f "$log_file" ] || touch "$log_file" - tail -f "$log_file" --pid="$$" & + [ -f "$log_file" ] || touch "$log_file" + tail -f "$log_file" --pid="$$" & - chroot_path="`mktemp -d`" - iso_extr_dir="`mktemp -d`" + chroot_path="`mktemp -d`" + iso_extr_dir="`mktemp -d`" - echo "Remaster LOG `date '+%Y-%m-%d'`" > "$log_file" - echo "MODE: renew" >> "$log_file" - echo "HOST: `hostname`" >> "$log_file" - echo >> "$log_file" + echo "Remaster LOG `date '+%Y-%m-%d'`" > "$log_file" + echo "MODE: renew" >> "$log_file" + echo "HOST: `hostname`" >> "$log_file" + echo >> "$log_file" - echo "### S e t t i n g s ###" >> "$log_file" - echo "#CD/DVD" >> "$log_file" - echo "iso_source=\"$iso_source\"" >> "$log_file" - echo "iso_destination=\"$iso_destination\"" >> "$log_file" - echo "iso_lable=\"$iso_lable\"" >> "$log_file" - echo >> "$log_file" + echo "### S e t t i n g s ###" >> "$log_file" + echo "#CD/DVD" >> "$log_file" + echo "iso_source=\"$iso_source\"" >> "$log_file" + echo "iso_destination=\"$iso_destination\"" >> "$log_file" + echo "iso_lable=\"$iso_lable\"" >> "$log_file" + echo >> "$log_file" - echo "#Filesystem (for pxe)" >> "$log_file" - echo "filesystem_source=\"$filesystem_source\"" >> "$log_file" - echo >> "$log_file" + echo "#Filesystem (for pxe)" >> "$log_file" + echo "filesystem_source=\"$filesystem_source\"" >> "$log_file" + echo >> "$log_file" - echo "#Network" >> "$log_file" - echo "proxy_host=\"$proxy_host\"" >> "$log_file" - echo "proxy_port=\"$proxy_port\"" >> "$log_file" - echo "domain=\"$domain\"" >> "$log_file" - echo "nameserver=\"$nameserver\"" >> "$log_file" - echo >> "$log_file" + echo "#Network" >> "$log_file" + echo "proxy_host=\"$proxy_host\"" >> "$log_file" + echo "proxy_port=\"$proxy_port\"" >> "$log_file" + echo "domain=\"$domain\"" >> "$log_file" + echo "nameserver=\"$nameserver\"" >> "$log_file" + echo >> "$log_file" - echo "#remaster_script" >> "$log_file" - echo "distro=\"$distro\"" >> "$log_file" - echo >> "$log_file" + echo "#remaster_script" >> "$log_file" + echo "distro=\"$distro\"" >> "$log_file" + echo >> "$log_file" - echo "log_file=\"$log_file\"" - echo "log_mail_aim=\"$log_mail_aim\"" - echo "log_mail_subject=\"$log_mail_subject\"" - echo "" + echo "log_file=\"$log_file\"" + echo "log_mail_aim=\"$log_mail_aim\"" + echo "log_mail_subject=\"$log_mail_subject\"" + echo "" - echo "#Sonstiges" >> "$log_file" - echo "tools_list=\"$tools_list\"" >> "$log_file" - echo $'\n' >> "$log_file" + echo "#Sonstiges" >> "$log_file" + echo "tools_list=\"$tools_list\"" >> "$log_file" + echo $'\n' >> "$log_file" - echo "### Enviroment ###" - echo "iso_extr_dir=\"$iso_extr_dir\"" >> "$log_file" - echo "chroot_path=\"$chroot_path\"" >> "$log_file" - #env >> "$log_file" - echo $'\n\n' >> "$log_file" + echo "### Enviroment ###" + echo "iso_extr_dir=\"$iso_extr_dir\"" >> "$log_file" + echo "chroot_path=\"$chroot_path\"" >> "$log_file" + #env >> "$log_file" + echo $'\n\n' >> "$log_file" - echo $'### R U N ... ###\n' >> "$log_file" + echo $'### R U N ... ###\n' >> "$log_file" - #1. Set and Check Enviroment - check_user - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + #1. Set and Check Enviroment + check_user + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - check_dependency - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + check_dependency + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - [ "$distro" != "" ] && distro="_$distro" + [ "$distro" != "" ] && distro="_$distro" - # 2. Entpacke ISO - iso_extract "$iso_source" "$iso_extr_dir" + # 2. Entpacke ISO + iso_extract "$iso_source" "$iso_extr_dir" - # 3. Entpacken der Dateien des Live-Systems - filesystem_img="`find "$iso_extr_dir" -name filesystem.squashfs`" - [ -e "$filesystem_img" ] || { - echo "### ERROR ### Image \"$iso_source\" has no \"filesystem.squashfs\"" >> "$log_file" - on_exit 15 >> "$log_file" - } + # 3. Entpacken der Dateien des Live-Systems + filesystem_img="`find "$iso_extr_dir" -name filesystem.squashfs`" + [ -e "$filesystem_img" ] || { + echo "### ERROR ### Image \"$iso_source\" has no \"filesystem.squashfs\"" >> "$log_file" + on_exit 15 >> "$log_file" + } - filesystem_extract "$filesystem_img" "$chroot_path" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + filesystem_extract "$filesystem_img" "$chroot_path" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - # 4. Vorbereiten für chroot-Umgebung: + # 4. Vorbereiten für chroot-Umgebung: - chroot_initial$distro "$chroot_path" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + chroot_initial$distro "$chroot_path" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - # 5. Setzen der Netzwerk-Einstellungen: + # 5. Setzen der Netzwerk-Einstellungen: - proxy_enable$distro "$chroot_path" "$proxy_host" "$proxy_port" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + proxy_enable$distro "$chroot_path" "$proxy_host" "$proxy_port" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - dns_set "$chroot_path" "$domain" "$nameserver" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + dns_set "$chroot_path" "$domain" "$nameserver" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - # 6. Updaten von Desinfec't: - os_update$distro "$chroot_path" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + # 6. Updaten von Desinfec't: + os_update$distro "$chroot_path" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - # 7. Installation optionaler Tools: + # 7. Installation optionaler Tools: - tools_add$distro "$chroot_path" "$tools_list" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + tools_add$distro "$chroot_path" "$tools_list" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - #addo ClamAV to conky_info - sed -i 's/# ${color white}ClamAV/ ${color white}ClamAV/g' "$chroot_path/etc/skel/.conkyrc" + #addo ClamAV to conky_info + sed -i 's/# ${color white}ClamAV/ ${color white}ClamAV/g' "$chroot_path/etc/skel/.conkyrc" - chroot_clean "$chroot_path" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + chroot_clean "$chroot_path" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - # 8. Manuelle Aktionen - deaktiviert + # 8. Manuelle Aktionen - deaktiviert - #echo "Now You Have TIME to do something MANUALY!" - #echo "enter in shell: #> chroot $chroot_path /bin/bash" - #chroot $chroot_path /bin/bash - #echo "Are You Finisch? Then Press [ENTER]" + #echo "Now You Have TIME to do something MANUALY!" + #echo "enter in shell: #> chroot $chroot_path /bin/bash" + #chroot $chroot_path /bin/bash + #echo "Are You Finisch? Then Press [ENTER]" - #config xrdp to start xfce - echo '#!/bin/sh' > "$chroot_path"/etc/xrdp/startwm.sh - echo "export LANG=\"de_DE.UTF-8\"" >> "$chroot_path"/etc/xrdp/startwm.sh - echo "startxfce4" >> "$chroot_path"/etc/xrdp/startwm.sh + #config xrdp to start xfce + echo '#!/bin/sh' > "$chroot_path"/etc/xrdp/startwm.sh + echo "export LANG=\"de_DE.UTF-8\"" >> "$chroot_path"/etc/xrdp/startwm.sh + echo "startxfce4" >> "$chroot_path"/etc/xrdp/startwm.sh - # 9. Umount - Chroot Umgebung auflösen + # 9. Umount - Chroot Umgebung auflösen - chroot_umount$distro "$chroot_path" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + chroot_umount$distro "$chroot_path" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - #Überprüfen ob alles ausgehängt wurde - [ "`chroot_is_mounted "$chroot_path"`" == "true" ] && { - echo "### ERROR ### Cant Unmount Chroot!" >> "$log_file" - on_exit 21 >> "$log_file" - } + #Überprüfen ob alles ausgehängt wurde + [ "`chroot_is_mounted "$chroot_path"`" == "true" ] && { + echo "### ERROR ### Cant Unmount Chroot!" >> "$log_file" + on_exit 21 >> "$log_file" + } - # 10. Packen und Ersetzen der Dateien des Live-Systems - rm "$filesystem_img" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + # 10. Packen und Ersetzen der Dateien des Live-Systems + rm "$filesystem_img" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - filesystem_pack "$chroot_path" "$filesystem_img" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + filesystem_pack "$chroot_path" "$filesystem_img" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - # wenn iso gewünscht - [ "$iso_destination" != "" ] && { - iso_create$distro "$chroot_path" "$iso_extr_dir" "$iso_destination" "$iso_lable" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - } + # wenn iso gewünscht + [ "$iso_destination" != "" ] && { + iso_create$distro "$chroot_path" "$iso_extr_dir" "$iso_destination" "$iso_lable" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + } - # wenn filesystem gewünscht - [ "$filesystem_source" != "" ] && { - #wen bereits forhanden dann löschen - [ -f "$filesystem_source" ] && rm "$filesystem_source" - cp "$filesystem_img" "$filesystem_source" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + # wenn filesystem gewünscht + [ "$filesystem_source" != "" ] && { + #wen bereits forhanden dann löschen + [ -f "$filesystem_source" ] && rm "$filesystem_source" + cp "$filesystem_img" "$filesystem_source" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - chmod 666 "$filesystem_source" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - } + chmod 666 "$filesystem_source" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + } - chmod 666 "$iso_destination" "$filesystem_img" >> "$log_file" + chmod 666 "$iso_destination" "$filesystem_img" >> "$log_file" - workspace_erase "$iso_extr_dir/" "$chroot_path/" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + workspace_erase "$iso_extr_dir/" "$chroot_path/" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - on_exit 0 + on_exit 0 } #remaster.sh update_pxe function main_update_pxe() { - [ "$log_file" == "" ] && log_file="`mktemp`" - [ -f "$log_file" ] || touch "$log_file" - tail -f "$log_file" --pid="$$" & + [ "$log_file" == "" ] && log_file="`mktemp`" + [ -f "$log_file" ] || touch "$log_file" + tail -f "$log_file" --pid="$$" & - chroot_path="`mktemp -d`" + chroot_path="`mktemp -d`" - echo "Remaster LOG `date '+%Y-%m-%d'`" > "$log_file" - echo "MODE: update_pxe" >> "$log_file" - echo "HOST: `hostname`" >> "$log_file" - echo >> "$log_file" + echo "Remaster LOG `date '+%Y-%m-%d'`" > "$log_file" + echo "MODE: update_pxe" >> "$log_file" + echo "HOST: `hostname`" >> "$log_file" + echo >> "$log_file" - echo "### S e t t i n g s ###" >> "$log_file" - echo "#Filesystem (for pxe)" >> "$log_file" - echo "filesystem_source=\"$filesystem_source\"" - echo >> "$log_file" + echo "### S e t t i n g s ###" >> "$log_file" + echo "#Filesystem (for pxe)" >> "$log_file" + echo "filesystem_source=\"$filesystem_source\"" + echo >> "$log_file" - echo "#Network" >> "$log_file" - echo "domain=\"$domain\"" >> "$log_file" - echo "nameserver=\"$nameserver\"" >> "$log_file" - echo >> "$log_file" + echo "#Network" >> "$log_file" + echo "domain=\"$domain\"" >> "$log_file" + echo "nameserver=\"$nameserver\"" >> "$log_file" + echo >> "$log_file" - echo "#remaster_script" >> "$log_file" - echo "distro=\"$distro\"" >> "$log_file" - echo >> "$log_file" + echo "#remaster_script" >> "$log_file" + echo "distro=\"$distro\"" >> "$log_file" + echo >> "$log_file" - echo "log_file=\"$log_file\"" - echo "log_mail_aim=\"$log_mail_aim\"" - echo "log_mail_subject=\"$log_mail_subject\"" - echo "" + echo "log_file=\"$log_file\"" + echo "log_mail_aim=\"$log_mail_aim\"" + echo "log_mail_subject=\"$log_mail_subject\"" + echo "" - echo "#Sonstiges" >> "$log_file" - echo "tools_list=\"$tools_list\"" >> "$log_file" - echo $'\n' >> "$log_file" + echo "#Sonstiges" >> "$log_file" + echo "tools_list=\"$tools_list\"" >> "$log_file" + echo $'\n' >> "$log_file" - echo "### Enviroment ###" - echo "chroot_path=\"$chroot_path\"" >> "$log_file" - #env >> "$log_file" - echo $'\n\n' >> "$log_file" + echo "### Enviroment ###" + echo "chroot_path=\"$chroot_path\"" >> "$log_file" + #env >> "$log_file" + echo $'\n\n' >> "$log_file" - echo $'### R U N ... ###\n' >> "$log_file" + echo $'### R U N ... ###\n' >> "$log_file" - #1. Set and Check Enviroment - check_user - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + #1. Set and Check Enviroment + check_user + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - check_dependency - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + check_dependency + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - [ "$distro" != "" ] && distro="_$distro" + [ "$distro" != "" ] && distro="_$distro" - # 1. Entpacken der Dateien des Live-Systems - [ -e "$filesystem_source" ] || { - echo "### ERROR ### \"$filesystem_source\" does not exist!" >> "$log_file" - on_exit 15 >> "$log_file" - } + # 1. Entpacken der Dateien des Live-Systems + [ -e "$filesystem_source" ] || { + echo "### ERROR ### \"$filesystem_source\" does not exist!" >> "$log_file" + on_exit 15 >> "$log_file" + } - filesystem_extract "$filesystem_source" "$chroot_path" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + filesystem_extract "$filesystem_source" "$chroot_path" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - # 2. Vorbereiten für chroot-Umgebung: + # 2. Vorbereiten für chroot-Umgebung: - chroot_initial$distro "$chroot_path" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + chroot_initial$distro "$chroot_path" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - # 3. Setzen der Netzwerk-Einstellungen: + # 3. Setzen der Netzwerk-Einstellungen: - dns_set "$chroot_path" "$domain" "$nameserver" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + dns_set "$chroot_path" "$domain" "$nameserver" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - # 4. Updaten von Desinfec't: - os_update$distro "$chroot_path" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + # 4. Updaten von Desinfec't: + os_update$distro "$chroot_path" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - # 5. Manuelle Aktionen - deaktiviert + # 5. Manuelle Aktionen - deaktiviert - echo "Now You Have TIME to do something MANUALY!" - #echo "enter in shell: - chroot $chroot_path /bin/bash - #echo "Are You Finisch? Then Press [ENTER]" - #read + echo "Now You Have TIME to do something MANUALY!" + #echo "enter in shell: + chroot $chroot_path /bin/bash + #echo "Are You Finisch? Then Press [ENTER]" + #read - # 6. Umount - Chroot Umgebung auflösen + # 6. Umount - Chroot Umgebung auflösen - chroot_umount$distro "$chroot_path" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + chroot_umount$distro "$chroot_path" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - #Überprüfen ob alles ausgehängt wurde - [ "`chroot_is_mounted "$chroot_path"`" == "true" ] && { - echo "### ERROR ### Cant Unmount Chroot!" >> "$log_file" - on_exit 21 >> "$log_file" - } + #Überprüfen ob alles ausgehängt wurde + [ "`chroot_is_mounted "$chroot_path"`" == "true" ] && { + echo "### ERROR ### Cant Unmount Chroot!" >> "$log_file" + on_exit 21 >> "$log_file" + } - # 5. Packen und Ersetzen der Dateien - rm "$filesystem_source" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + # 5. Packen und Ersetzen der Dateien + rm "$filesystem_source" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - filesystem_pack "$chroot_path" "$filesystem_source" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + filesystem_pack "$chroot_path" "$filesystem_source" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - chmod 777 "$filesystem_source" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + chmod 777 "$filesystem_source" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - workspace_erase "$chroot_path/" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + workspace_erase "$chroot_path/" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - on_exit 0 + on_exit 0 } #remaster.sh update_iso #in arbeit function main_update_iso() { - [ -f "$log_file" ] || touch "$log_file" - tail -f "$log_file" --pid="$$" & + [ -f "$log_file" ] || touch "$log_file" + tail -f "$log_file" --pid="$$" & - chroot_path="`mktemp -d`" - iso_extr_dir="`mktemp -d`" + chroot_path="`mktemp -d`" + iso_extr_dir="`mktemp -d`" - echo "Remaster LOG `date '+%Y-%m-%d'`" > "$log_file" - echo "MODE: update_iso" >> "$log_file" - echo "HOST: `hostname`" >> "$log_file" - echo >> "$log_file" + echo "Remaster LOG `date '+%Y-%m-%d'`" > "$log_file" + echo "MODE: update_iso" >> "$log_file" + echo "HOST: `hostname`" >> "$log_file" + echo >> "$log_file" - echo "### S e t t i n g s ###" >> "$log_file" - echo "#CD/DVD" >> "$log_file" - echo "iso_source=\"$iso_source\"" >> "$log_file" - echo "iso_destination=\"$iso_destination\"" >> "$log_file" - echo "iso_lable=\"$iso_lable\"" >> "$log_file" - echo >> "$log_file" + echo "### S e t t i n g s ###" >> "$log_file" + echo "#CD/DVD" >> "$log_file" + echo "iso_source=\"$iso_source\"" >> "$log_file" + echo "iso_destination=\"$iso_destination\"" >> "$log_file" + echo "iso_lable=\"$iso_lable\"" >> "$log_file" + echo >> "$log_file" - echo "#Filesystem (for pxe)" >> "$log_file" - echo "filesystem_source=\"$filesystem_source\"" >> "$log_file" - echo >> "$log_file" + echo "#Filesystem (for pxe)" >> "$log_file" + echo "filesystem_source=\"$filesystem_source\"" >> "$log_file" + echo >> "$log_file" - echo "#Network" >> "$log_file" - echo "proxy_host=\"$proxy_host\"" >> "$log_file" - echo "proxy_port=\"$proxy_port\"" >> "$log_file" - echo "domain=\"$domain\"" >> "$log_file" - echo "nameserver=\"$nameserver\"" >> "$log_file" - echo >> "$log_file" + echo "#Network" >> "$log_file" + echo "proxy_host=\"$proxy_host\"" >> "$log_file" + echo "proxy_port=\"$proxy_port\"" >> "$log_file" + echo "domain=\"$domain\"" >> "$log_file" + echo "nameserver=\"$nameserver\"" >> "$log_file" + echo >> "$log_file" - echo "#remaster_script" >> "$log_file" - echo "distro=\"$distro\"" >> "$log_file" - echo >> "$log_file" + echo "#remaster_script" >> "$log_file" + echo "distro=\"$distro\"" >> "$log_file" + echo >> "$log_file" - echo "log_file=\"$log_file\"" - echo "log_mail_aim=\"$log_mail_aim\"" - echo "log_mail_subject=\"$log_mail_subject\"" - echo "" + echo "log_file=\"$log_file\"" + echo "log_mail_aim=\"$log_mail_aim\"" + echo "log_mail_subject=\"$log_mail_subject\"" + echo "" - echo "#Sonstiges" >> "$log_file" - echo "tools_list=\"$tools_list\"" >> "$log_file" - echo $'\n' >> "$log_file" + echo "#Sonstiges" >> "$log_file" + echo "tools_list=\"$tools_list\"" >> "$log_file" + echo $'\n' >> "$log_file" - echo "### Enviroment ###" - echo "iso_extr_dir=\"$iso_extr_dir\"" >> "$log_file" - echo "chroot_path=\"$chroot_path\"" >> "$log_file" - #env >> "$log_file" - echo $'\n\n' >> "$log_file" + echo "### Enviroment ###" + echo "iso_extr_dir=\"$iso_extr_dir\"" >> "$log_file" + echo "chroot_path=\"$chroot_path\"" >> "$log_file" + #env >> "$log_file" + echo $'\n\n' >> "$log_file" - echo $'### R U N ... ###\n' >> "$log_file" + echo $'### R U N ... ###\n' >> "$log_file" - #1. Set and Check Enviroment - check_user - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + #1. Set and Check Enviroment + check_user + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - check_dependency - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + check_dependency + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - [ "$distro" != "" ] && distro="_$distro" + [ "$distro" != "" ] && distro="_$distro" - # 2. Entpacke ISO - iso_extract "$iso_source" "$iso_extr_dir" + # 2. Entpacke ISO + iso_extract "$iso_source" "$iso_extr_dir" - # 3. Checke pxe version - # if pxe is set - # if (date != date ); then $0 update_pxe #4.1 - # filesystem = update #4.2 - # else - # extrakt filesystem #5. - # update #6. - # done - # pack iso + # 3. Checke pxe version + # if pxe is set + # if (date != date ); then $0 update_pxe #4.1 + # filesystem = update #4.2 + # else + # extrakt filesystem #5. + # update #6. + # done + # pack iso - # 3. Entpacken der Dateien des Live-Systems - filesystem_img="`find "$iso_extr_dir" -name filesystem.squashfs`" - [ -e "$filesystem_img" ] || { - echo "### ERROR ### Image \"$iso_source\" has no \"filesystem.squashfs\"" >> "$log_file" - on_exit 15 >> "$log_file" - } + # 3. Entpacken der Dateien des Live-Systems + filesystem_img="`find "$iso_extr_dir" -name filesystem.squashfs`" + [ -e "$filesystem_img" ] || { + echo "### ERROR ### Image \"$iso_source\" has no \"filesystem.squashfs\"" >> "$log_file" + on_exit 15 >> "$log_file" + } - filesystem_extract "$filesystem_img" "$chroot_path" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + filesystem_extract "$filesystem_img" "$chroot_path" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - # 4. Vorbereiten für chroot-Umgebung: + # 4. Vorbereiten für chroot-Umgebung: - chroot_initial$distro "$chroot_path" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + chroot_initial$distro "$chroot_path" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - # 5. Setzen der Netzwerk-Einstellungen: + # 5. Setzen der Netzwerk-Einstellungen: - proxy_enable$distro "$chroot_path" "$proxy_host" "$proxy_port" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + proxy_enable$distro "$chroot_path" "$proxy_host" "$proxy_port" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - dns_set "$chroot_path" "$domain" "$nameserver" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + dns_set "$chroot_path" "$domain" "$nameserver" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - # 6. Updaten von Desinfec't: - os_update$distro "$chroot_path" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + # 6. Updaten von Desinfec't: + os_update$distro "$chroot_path" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - # 7. Installation optionaler Tools: + # 7. Installation optionaler Tools: - tools_add$distro "$chroot_path" "$tools_list" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + tools_add$distro "$chroot_path" "$tools_list" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - #addo ClamAV to conky_info - sed -i 's/# ${color white}ClamAV/ ${color white}ClamAV/g' "$chroot_path/etc/skel/.conkyrc" + #addo ClamAV to conky_info + sed -i 's/# ${color white}ClamAV/ ${color white}ClamAV/g' "$chroot_path/etc/skel/.conkyrc" - chroot_clean "$chroot_path" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + chroot_clean "$chroot_path" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - # 8. Manuelle Aktionen - deaktiviert + # 8. Manuelle Aktionen - deaktiviert - #echo "Now You Have TIME to do something MANUALY!" - #echo "enter in shell: #> chroot $chroot_path /bin/bash" - #chroot $chroot_path /bin/bash - #echo "Are You Finisch? Then Press [ENTER]" + #echo "Now You Have TIME to do something MANUALY!" + #echo "enter in shell: #> chroot $chroot_path /bin/bash" + #chroot $chroot_path /bin/bash + #echo "Are You Finisch? Then Press [ENTER]" - # 9. Umount - Chroot Umgebung auflösen + # 9. Umount - Chroot Umgebung auflösen - chroot_umount$distro "$chroot_path" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + chroot_umount$distro "$chroot_path" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - #Überprüfen ob alles ausgehängt wurde - [ "`chroot_is_mounted "$chroot_path"`" == "true" ] && { - echo "### ERROR ### Cant Unmount Chroot!" >> "$log_file" - on_exit 21 >> "$log_file" - } + #Überprüfen ob alles ausgehängt wurde + [ "`chroot_is_mounted "$chroot_path"`" == "true" ] && { + echo "### ERROR ### Cant Unmount Chroot!" >> "$log_file" + on_exit 21 >> "$log_file" + } - # 10. Packen und Ersetzen der Dateien des Live-Systems - rm "$filesystem_img" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + # 10. Packen und Ersetzen der Dateien des Live-Systems + rm "$filesystem_img" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - filesystem_pack "$chroot_path" "$filesystem_img" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + filesystem_pack "$chroot_path" "$filesystem_img" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - # wenn iso gewünscht - [ "$iso_destination" != "" ] && { - iso_create$distro "$chroot_path" "$iso_extr_dir" "$iso_destination" "$iso_lable" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - } + # wenn iso gewünscht + [ "$iso_destination" != "" ] && { + iso_create$distro "$chroot_path" "$iso_extr_dir" "$iso_destination" "$iso_lable" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + } - # wenn filesystem gewünscht - [ "$filesystem_source" != "" ] && { - #wen bereits forhanden dann löschen - [ -f "$filesystem_source" ] && rm "$filesystem_source" - cp "$filesystem_img" "$filesystem_source" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + # wenn filesystem gewünscht + [ "$filesystem_source" != "" ] && { + #wen bereits forhanden dann löschen + [ -f "$filesystem_source" ] && rm "$filesystem_source" + cp "$filesystem_img" "$filesystem_source" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - chmod 666 "$filesystem_source" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - } + chmod 666 "$filesystem_source" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + } - chmod 666 "$iso_destination" "$filesystem_img" >> "$log_file" + chmod 666 "$iso_destination" "$filesystem_img" >> "$log_file" - #11. End - workspace_erase "$iso_extr_dir/" "$chroot_path/" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" + #11. End + workspace_erase "$iso_extr_dir/" "$chroot_path/" >> "$log_file" + error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - on_exit 0 + on_exit 0 } #remaster.sh update function main_update() { - main_update_pxe + main_update_pxe } ##################################################################################### @@ -518,50 +518,50 @@ source /func/iso_create #iso_create_desinfect2015 [chroot_path] [iso_extr_dir] [iso_destination] [iso_lable] function iso_create_desinfect2015() { - echo "prepere iso folder ... " + echo "prepere iso folder ... " - chroot_path="$1" - iso_extr_dir="$2" - iso_destination="$3" - iso_lable="$4" + chroot_path="$1" + iso_extr_dir="$2" + iso_destination="$3" + iso_lable="$4" - #desinfect - rm "$iso_extr_dir/casper/initrd.lz" - wget http://www.heise.de/ct/projekte/desinfect/des15/initrd.lz -O "$iso_extr_dir/casper/initrd.lz" + #desinfect + rm "$iso_extr_dir/casper/initrd.lz" + wget http://www.heise.de/ct/projekte/desinfect/des15/initrd.lz -O "$iso_extr_dir/casper/initrd.lz" - echo "done" + echo "done" - iso_create "$chroot_path" "$iso_extr_dir" "$iso_destination" "$iso_lable" + iso_create "$chroot_path" "$iso_extr_dir" "$iso_destination" "$iso_lable" } #iso_create_desinfect2016 [chroot_path] [iso_extr_dir] [iso_destination] [iso_lable] function iso_create_desinfect2016() { - #echo "prepere iso folder ... " + #echo "prepere iso folder ... " - chroot_path="$1" - iso_extr_dir="$2" - iso_destination="$3" - iso_lable="$4" + chroot_path="$1" + iso_extr_dir="$2" + iso_destination="$3" + iso_lable="$4" - #desinfect - #rm "$iso_extr_dir/casper/initrd.lz" - #wget http://www.heise.de/ct/projekte/desinfect/des15/initrd.lz -O "$iso_extr_dir/casper/initrd.lz" + #desinfect + #rm "$iso_extr_dir/casper/initrd.lz" + #wget http://www.heise.de/ct/projekte/desinfect/des15/initrd.lz -O "$iso_extr_dir/casper/initrd.lz" - #echo "done" + #echo "done" - iso_create "$chroot_path" "$iso_extr_dir" "$iso_destination" "$iso_lable" + iso_create "$chroot_path" "$iso_extr_dir" "$iso_destination" "$iso_lable" } #iso_create_desinfect2017 [chroot_path] [iso_extr_dir] [iso_destination] [iso_lable] function iso_create_desinfect2017() { - #echo "prepere iso folder ... " + #echo "prepere iso folder ... " - chroot_path="$1" - iso_extr_dir="$2" - iso_destination="$3" - iso_lable="$4" + chroot_path="$1" + iso_extr_dir="$2" + iso_destination="$3" + iso_lable="$4" - iso_create "$chroot_path" "$iso_extr_dir" "$iso_destination" "$iso_lable" + iso_create "$chroot_path" "$iso_extr_dir" "$iso_destination" "$iso_lable" } ### chroot ### @@ -571,53 +571,53 @@ source /func/chroot_initial #chroot_initial_desinfect2015 [chroot_dir] function chroot_initial_desinfect2015() { - #$1 = chroot dir + #$1 = chroot dir - chroot_initial "$1" + chroot_initial "$1" - echo -n "initial desinfect on chroot ... " + echo -n "initial desinfect on chroot ... " - #check chroot dir - chroot_dir="$1" - [ -d "$chroot_dir" ] || { - echo "### ERROR ### chroot_initial_desinfect: chroot directory not exist!" - return 12 - } + #check chroot dir + chroot_dir="$1" + [ -d "$chroot_dir" ] || { + echo "### ERROR ### chroot_initial_desinfect: chroot directory not exist!" + return 12 + } - #mount virus definitions - #bitdefender - mount --bind $chroot_dir/opt/BitDefender-scanner/var/lib/scan{.orig,} - mount --bind $chroot_dir/var/kl/bases_rd{.orig,} + #mount virus definitions + #bitdefender + mount --bind $chroot_dir/opt/BitDefender-scanner/var/lib/scan{.orig,} + mount --bind $chroot_dir/var/kl/bases_rd{.orig,} - echo "done" + echo "done" } #chroot_initial_desinfect2016 [chroot_dir] function chroot_initial_desinfect2016() { - #$1 = chroot dir + #$1 = chroot dir - chroot_initial "$1" + chroot_initial "$1" - echo -n "initial desinfect on chroot ... " + echo -n "initial desinfect on chroot ... " - #check chroot dir - chroot_dir="$1" - [ -d "$chroot_dir" ] || { - echo "### ERROR ### chroot_initial_desinfect: chroot directory not exist!" - return 12 - } + #check chroot dir + chroot_dir="$1" + [ -d "$chroot_dir" ] || { + echo "### ERROR ### chroot_initial_desinfect: chroot directory not exist!" + return 12 + } - #mount virus definitions - mount --bind $chroot_dir/var/kl/bases_rd{.orig,} + #mount virus definitions + mount --bind $chroot_dir/var/kl/bases_rd{.orig,} - echo "done" + echo "done" } #chroot_initial_desinfect2017 [chroot_dir] function chroot_initial_desinfect2017() { - #$1 = chroot dir + #$1 = chroot dir - chroot_initial "$1" + chroot_initial "$1" } @@ -630,55 +630,55 @@ source /func/chroot_umount #chroot_umount_desinfect2015 [chroot_dir] function chroot_umount_desinfect2015() { - #call main mount - chroot_umount "$1" + #call main mount + chroot_umount "$1" - echo -n "unmount desinfect on chroot ... " - #check chroot dir - chroot_dir="$1" - [ -d "$chroot_dir" ] || { - echo "### ERROR ### chroot_umount_desinfect: chroot directory not exist!" - return 12 - } + echo -n "unmount desinfect on chroot ... " + #check chroot dir + chroot_dir="$1" + [ -d "$chroot_dir" ] || { + echo "### ERROR ### chroot_umount_desinfect: chroot directory not exist!" + return 12 + } - for d in "$chroot_dir/opt/BitDefender-scanner/var/lib/scan" "$chroot_dir/var/kl/bases_rd" ; do - umount $d - retval=$? - [ "$retval" -gt 0 ] && { - echo "### ERROR ### chroot_umount_desinfect: can't umount \"$d\"!" - return 21 - } - done + for d in "$chroot_dir/opt/BitDefender-scanner/var/lib/scan" "$chroot_dir/var/kl/bases_rd" ; do + umount $d + retval=$? + [ "$retval" -gt 0 ] && { + echo "### ERROR ### chroot_umount_desinfect: can't umount \"$d\"!" + return 21 + } + done - echo "done" + echo "done" } #chroot_umount_desinfect2016 [chroot_dir] function chroot_umount_desinfect2016() { - #call main mount - chroot_umount "$1" + #call main mount + chroot_umount "$1" - echo -n "unmount desinfect on chroot ... " - #check chroot dir - chroot_dir="$1" - [ -d "$chroot_dir" ] || { - echo "### ERROR ### chroot_umount_desinfect: chroot directory not exist!" - return 12 - } + echo -n "unmount desinfect on chroot ... " + #check chroot dir + chroot_dir="$1" + [ -d "$chroot_dir" ] || { + echo "### ERROR ### chroot_umount_desinfect: chroot directory not exist!" + return 12 + } - umount "$chroot_dir/var/kl/bases_rd" - [ "$?" -gt 0 ] && { - echo "### ERROR ### chroot_umount_desinfect: can't umount \"$chroot_dir/var/kl/bases_rd\"!" - #return 21 - } + umount "$chroot_dir/var/kl/bases_rd" + [ "$?" -gt 0 ] && { + echo "### ERROR ### chroot_umount_desinfect: can't umount \"$chroot_dir/var/kl/bases_rd\"!" + #return 21 + } - echo "done" + echo "done" } #chroot_umount_desinfect2017 [chroot_dir] function chroot_umount_desinfect2017() { - #call main mount - chroot_umount "$1" + #call main mount + chroot_umount "$1" } #chroot_is_mounted [chroot_dir] @@ -693,402 +693,402 @@ source /func/chroot_sh #proxy_enable [chroot_dir] [proxy_host] [proxy_port] function proxy_enable() { - echo -n "enable proxy ... " + echo -n "enable proxy ... " - chroot_dir="$1" - proxy_host="$2" - proxy_port="$3" + chroot_dir="$1" + proxy_host="$2" + proxy_port="$3" - [ -d "$chroot_dir" ] || { - echo "### ERROR ### chroot_umount_desinfect: chroot directory not exist!" - return 12 - } + [ -d "$chroot_dir" ] || { + echo "### ERROR ### chroot_umount_desinfect: chroot directory not exist!" + return 12 + } - #Wenn alle zwei Parameter gegeben - if [ "$proxy_host" != "" ] && [ "$proxy_port" != "" ] ; then - echo "http_proxy=\"http://$proxy_host:$proxy_port\"" >> $chroot_dir/etc/environment - echo "https_proxy=\"http://$proxy_host:$proxy_port\"" >> $chroot_dir/etc/environment - echo "ftp_proxy=\"http://$proxy_host:$proxy_port\"" >> $chroot_dir/etc/environment + #Wenn alle zwei Parameter gegeben + if [ "$proxy_host" != "" ] && [ "$proxy_port" != "" ] ; then + echo "http_proxy=\"http://$proxy_host:$proxy_port\"" >> $chroot_dir/etc/environment + echo "https_proxy=\"http://$proxy_host:$proxy_port\"" >> $chroot_dir/etc/environment + echo "ftp_proxy=\"http://$proxy_host:$proxy_port\"" >> $chroot_dir/etc/environment - echo "HTTP_PROXY=\"http://$proxy_host:$proxy_port\"" >> $chroot_dir/etc/environment - echo "HTTPS_PROXY=\"http://$proxy_host:$proxy_port\"" >> $chroot_dir/etc/environment - echo "FTP_PROXY=\"http://$proxy_host:$proxy_port\"" >> $chroot_dir/etc/environment + echo "HTTP_PROXY=\"http://$proxy_host:$proxy_port\"" >> $chroot_dir/etc/environment + echo "HTTPS_PROXY=\"http://$proxy_host:$proxy_port\"" >> $chroot_dir/etc/environment + echo "FTP_PROXY=\"http://$proxy_host:$proxy_port\"" >> $chroot_dir/etc/environment - echo "Acquire::http::Proxy \"http://$proxy_host:$proxy_port\"\;" > $chroot_dir/etc/apt/apt.conf.d/90proxy - echo "Acquire::ftp::Proxy \"ftp://$proxy_host:$proxy_port\"\;" >> $chroot_dir/etc/apt/apt.conf.d/90proxy + echo "Acquire::http::Proxy \"http://$proxy_host:$proxy_port\"\;" > $chroot_dir/etc/apt/apt.conf.d/90proxy + echo "Acquire::ftp::Proxy \"ftp://$proxy_host:$proxy_port\"\;" >> $chroot_dir/etc/apt/apt.conf.d/90proxy - echo "done" - else - if [ "$proxy_host" == "" ] && [ "$proxy_port" == "" ] ; then - echo "done" - else - echo "### ERROR ### proxy_enable: wrong parameters! (\"$chroot_dir\"; \"$proxy_host\"; \"$proxy_port\")" - echo "proxy_enable [chroot_dir] [proxy_host] [proxy_port]" - return 2 - fi - fi + echo "done" + else + if [ "$proxy_host" == "" ] && [ "$proxy_port" == "" ] ; then + echo "done" + else + echo "### ERROR ### proxy_enable: wrong parameters! (\"$chroot_dir\"; \"$proxy_host\"; \"$proxy_port\")" + echo "proxy_enable [chroot_dir] [proxy_host] [proxy_port]" + return 2 + fi + fi } #proxy_enable_desinfect2015 [chroot_dir] [proxy_host] [proxy_port] function proxy_enable_desinfect2015() { - proxy_enable $1 $2 $3 + proxy_enable $1 $2 $3 - echo -n "enable proxy for desinfect's av ... " + echo -n "enable proxy for desinfect's av ... " - chroot_dir="$1" - proxy_host="$2" - proxy_port="$3" + chroot_dir="$1" + proxy_host="$2" + proxy_port="$3" - #Avast AntiVirus - sed -i "s/--skip-master-file/--skip-master-file --proxy-host=$proxy_host --proxy-port=$proxy_port/g" "$chroot_dir/AntiVirUpdate/avupdate" - sed -i "s/--proxy-host=$proxy_host --proxy-port=$proxy_port --proxy-host=$proxy_host --proxy-port=$proxy_port/--proxy-host=$proxy_host --proxy-port=$proxy_port/g" "$chroot_dir/AntiVirUpdate/avupdate" + #Avast AntiVirus + sed -i "s/--skip-master-file/--skip-master-file --proxy-host=$proxy_host --proxy-port=$proxy_port/g" "$chroot_dir/AntiVirUpdate/avupdate" + sed -i "s/--proxy-host=$proxy_host --proxy-port=$proxy_port --proxy-host=$proxy_host --proxy-port=$proxy_port/--proxy-host=$proxy_host --proxy-port=$proxy_port/g" "$chroot_dir/AntiVirUpdate/avupdate" - #BitDefender - echo "ProxyEnable = Yes" >> "$chroot_dir/etc/BitDefender-scanner/bdscan.conf" - echo "ProxyHost = $proxy_host:$proxy_port" >> "$chroot_dir/etc/BitDefender-scanner/bdscan.conf" + #BitDefender + echo "ProxyEnable = Yes" >> "$chroot_dir/etc/BitDefender-scanner/bdscan.conf" + echo "ProxyHost = $proxy_host:$proxy_port" >> "$chroot_dir/etc/BitDefender-scanner/bdscan.conf" - #Clam AV - echo "HTTPProxyServer $proxy_host" >> "$chroot_dir/etc/clamav/freshclam.conf" - echo "HTTPProxyPort $proxy_port" >> "$chroot_dir/etc/clamav/freshclam.conf" + #Clam AV + echo "HTTPProxyServer $proxy_host" >> "$chroot_dir/etc/clamav/freshclam.conf" + echo "HTTPProxyPort $proxy_port" >> "$chroot_dir/etc/clamav/freshclam.conf" - #Kaspersky - sed -i "s/0<\/tDWORD>/1<\/tDWORD>/g" "$chroot_dir/etc/kl/config.xml" - sed -i "s/<\/tSTRING>/$proxy_host<\/tSTRING>/g" "$chroot_dir/etc/kl/config.xml" - sed -i "s/<\/tDWORD>/$proxy_port<\/tDWORD>/g" "$chroot_dir/etc/kl/config.xml" + #Kaspersky + sed -i "s/0<\/tDWORD>/1<\/tDWORD>/g" "$chroot_dir/etc/kl/config.xml" + sed -i "s/<\/tSTRING>/$proxy_host<\/tSTRING>/g" "$chroot_dir/etc/kl/config.xml" + sed -i "s/<\/tDWORD>/$proxy_port<\/tDWORD>/g" "$chroot_dir/etc/kl/config.xml" - echo "done" + echo "done" } #proxy_enable_desinfect2016 [chroot_dir] [proxy_host] [proxy_port] function proxy_enable_desinfect2016() { - proxy_enable $1 $2 $3 + proxy_enable $1 $2 $3 - echo -n "enable proxy for desinfect's av ... " + echo -n "enable proxy for desinfect's av ... " - chroot_dir="$1" - proxy_host="$2" - proxy_port="$3" - tmp_file_344532="`mktemp`" + chroot_dir="$1" + proxy_host="$2" + proxy_port="$3" + tmp_file_344532="`mktemp`" - #Avast AntiVirus - sed -i "s/--skip-master-file/--skip-master-file --proxy-host=$proxy_host --proxy-port=$proxy_port/g" "$chroot_dir/AntiVirUpdate/avupdate" - sed -i "s/--proxy-host=$proxy_host --proxy-port=$proxy_port --proxy-host=$proxy_host --proxy-port=$proxy_port/--proxy-host=$proxy_host --proxy-port=$proxy_port/g" "$chroot_dir/AntiVirUpdate/avupdate" + #Avast AntiVirus + sed -i "s/--skip-master-file/--skip-master-file --proxy-host=$proxy_host --proxy-port=$proxy_port/g" "$chroot_dir/AntiVirUpdate/avupdate" + sed -i "s/--proxy-host=$proxy_host --proxy-port=$proxy_port --proxy-host=$proxy_host --proxy-port=$proxy_port/--proxy-host=$proxy_host --proxy-port=$proxy_port/g" "$chroot_dir/AntiVirUpdate/avupdate" - #Clam AV - cat "$chroot_dir/etc/clamav/freshclam.conf" | grep -v "HTTPProxyServer" | grep -v "HTTPProxyPort" > "$tmp_file_344532" - rm "$chroot_dir/etc/clamav/freshclam.conf" - cp "$tmp_file_344532" "$chroot_dir/etc/clamav/freshclam.conf" + #Clam AV + cat "$chroot_dir/etc/clamav/freshclam.conf" | grep -v "HTTPProxyServer" | grep -v "HTTPProxyPort" > "$tmp_file_344532" + rm "$chroot_dir/etc/clamav/freshclam.conf" + cp "$tmp_file_344532" "$chroot_dir/etc/clamav/freshclam.conf" - echo "HTTPProxyServer $proxy_host" >> "$chroot_dir/etc/clamav/freshclam.conf" - echo "HTTPProxyPort $proxy_port" >> "$chroot_dir/etc/clamav/freshclam.conf" + echo "HTTPProxyServer $proxy_host" >> "$chroot_dir/etc/clamav/freshclam.conf" + echo "HTTPProxyPort $proxy_port" >> "$chroot_dir/etc/clamav/freshclam.conf" - #Eset AV - cat "$chroot_dir/etc/opt/eset/esets/esets.cfg" | grep -v "proxy_addr" | grep -v "proxy_port" > "$tmp_file_344532" - rm "$chroot_dir/etc/opt/eset/esets/esets.cfg" - cp "$tmp_file_344532" "$chroot_dir/etc/opt/eset/esets/esets.cfg" + #Eset AV + cat "$chroot_dir/etc/opt/eset/esets/esets.cfg" | grep -v "proxy_addr" | grep -v "proxy_port" > "$tmp_file_344532" + rm "$chroot_dir/etc/opt/eset/esets/esets.cfg" + cp "$tmp_file_344532" "$chroot_dir/etc/opt/eset/esets/esets.cfg" - echo "proxy_addr = \"$proxy_host\"" >> "$chroot_dir/etc/opt/eset/esets/esets.cfg" - echo "proxy_port = $proxy_port" >> "$chroot_dir/etc/opt/eset/esets/esets.cfg" + echo "proxy_addr = \"$proxy_host\"" >> "$chroot_dir/etc/opt/eset/esets/esets.cfg" + echo "proxy_port = $proxy_port" >> "$chroot_dir/etc/opt/eset/esets/esets.cfg" - #Kaspersky - sed -i "s/0<\/tDWORD>/1<\/tDWORD>/g" "$chroot_dir/etc/kl/config.xml" - sed -i "s/<\/tSTRING>/$proxy_host<\/tSTRING>/g" "$chroot_dir/etc/kl/config.xml" - sed -i "s/<\/tDWORD>/$proxy_port<\/tDWORD>/g" "$chroot_dir/etc/kl/config.xml" + #Kaspersky + sed -i "s/0<\/tDWORD>/1<\/tDWORD>/g" "$chroot_dir/etc/kl/config.xml" + sed -i "s/<\/tSTRING>/$proxy_host<\/tSTRING>/g" "$chroot_dir/etc/kl/config.xml" + sed -i "s/<\/tDWORD>/$proxy_port<\/tDWORD>/g" "$chroot_dir/etc/kl/config.xml" - rm "$tmp_file_344532" - tmp_file_344532= + rm "$tmp_file_344532" + tmp_file_344532= - echo "done" + echo "done" } #proxy_enable_desinfect2017 [chroot_dir] [proxy_host] [proxy_port] function proxy_enable_desinfect2017() { - proxy_enable $1 $2 $3 + proxy_enable $1 $2 $3 - echo "enable proxy for desinfect's av ... " + echo "enable proxy for desinfect's av ... " - chroot_dir="$1" - proxy_host="$2" - proxy_port="$3" - tmp_file_344532="`mktemp`" + chroot_dir="$1" + proxy_host="$2" + proxy_port="$3" + tmp_file_344532="`mktemp`" - #Avast AntiVirus - if [ -f "$chroot_dir/AntiVirUpdate/avupdate" ]; then - echo "Avast AntiVirus: Found" - sed -i "s/--skip-master-file/--skip-master-file --proxy-host=$proxy_host --proxy-port=$proxy_port/g" "$chroot_dir/AntiVirUpdate/avupdate" - sed -i "s/--proxy-host=$proxy_host --proxy-port=$proxy_port --proxy-host=$proxy_host --proxy-port=$proxy_port/--proxy-host=$proxy_host --proxy-port=$proxy_port/g" "$chroot_dir/AntiVirUpdate/avupdate" - else - eco "Avast AntiVirus: NOT Found" - fi + #Avast AntiVirus + if [ -f "$chroot_dir/AntiVirUpdate/avupdate" ]; then + echo "Avast AntiVirus: Found" + sed -i "s/--skip-master-file/--skip-master-file --proxy-host=$proxy_host --proxy-port=$proxy_port/g" "$chroot_dir/AntiVirUpdate/avupdate" + sed -i "s/--proxy-host=$proxy_host --proxy-port=$proxy_port --proxy-host=$proxy_host --proxy-port=$proxy_port/--proxy-host=$proxy_host --proxy-port=$proxy_port/g" "$chroot_dir/AntiVirUpdate/avupdate" + else + eco "Avast AntiVirus: NOT Found" + fi - #Eset AV - if [ -f "$chroot_dir/etc/opt/eset/esets/esets.cfg" ]; then - echo "Eset AV: Found" - cat "$chroot_dir/etc/opt/eset/esets/esets.cfg" | grep -v "proxy_addr" | grep -v "proxy_port" > "$tmp_file_344532" - rm "$chroot_dir/etc/opt/eset/esets/esets.cfg" - cp "$tmp_file_344532" "$chroot_dir/etc/opt/eset/esets/esets.cfg" + #Eset AV + if [ -f "$chroot_dir/etc/opt/eset/esets/esets.cfg" ]; then + echo "Eset AV: Found" + cat "$chroot_dir/etc/opt/eset/esets/esets.cfg" | grep -v "proxy_addr" | grep -v "proxy_port" > "$tmp_file_344532" + rm "$chroot_dir/etc/opt/eset/esets/esets.cfg" + cp "$tmp_file_344532" "$chroot_dir/etc/opt/eset/esets/esets.cfg" - echo "proxy_addr = \"$proxy_host\"" >> "$chroot_dir/etc/opt/eset/esets/esets.cfg" - echo "proxy_port = $proxy_port" >> "$chroot_dir/etc/opt/eset/esets/esets.cfg" - else - eco "Eset AV: NOT Found" - fi + echo "proxy_addr = \"$proxy_host\"" >> "$chroot_dir/etc/opt/eset/esets/esets.cfg" + echo "proxy_port = $proxy_port" >> "$chroot_dir/etc/opt/eset/esets/esets.cfg" + else + eco "Eset AV: NOT Found" + fi - #ClamAV - if [ -f "$chroot_dir/etc/clamav/freshclam.conf" ]; then - echo "ClamAV: Found" - cat "$chroot_dir/etc/clamav/freshclam.conf" | grep -v "HTTPProxyServer" | grep -v "HTTPProxyPort" > "$tmp_file_344532" - rm "$chroot_dir/etc/clamav/freshclam.conf" - cp "$tmp_file_344532" "$chroot_dir/etc/clamav/freshclam.conf" + #ClamAV + if [ -f "$chroot_dir/etc/clamav/freshclam.conf" ]; then + echo "ClamAV: Found" + cat "$chroot_dir/etc/clamav/freshclam.conf" | grep -v "HTTPProxyServer" | grep -v "HTTPProxyPort" > "$tmp_file_344532" + rm "$chroot_dir/etc/clamav/freshclam.conf" + cp "$tmp_file_344532" "$chroot_dir/etc/clamav/freshclam.conf" - echo "HTTPProxyServer $proxy_host" >> "$chroot_dir/etc/clamav/freshclam.conf" - echo "HTTPProxyPort $proxy_port" >> "$chroot_dir/etc/clamav/freshclam.conf" - else - eco "ClamAV: NOT Found" - fi + echo "HTTPProxyServer $proxy_host" >> "$chroot_dir/etc/clamav/freshclam.conf" + echo "HTTPProxyPort $proxy_port" >> "$chroot_dir/etc/clamav/freshclam.conf" + else + eco "ClamAV: NOT Found" + fi - #Sophos - if [ -f ""$chroot_dir/opt/sophos-av/etc/savd.cfg"" ]; then - echo "Sophos: Found" - echo "sophos:
http://www-proxy.bybn.de:80
" >> "$chroot_dir/opt/sophos-av/etc/savd.cfg" - else - eco "Sophos: NOT Found" - fi + #Sophos + if [ -f ""$chroot_dir/opt/sophos-av/etc/savd.cfg"" ]; then + echo "Sophos: Found" + echo "sophos:
http://www-proxy.bybn.de:80
" >> "$chroot_dir/opt/sophos-av/etc/savd.cfg" + else + eco "Sophos: NOT Found" + fi - #F-Secure - if [ -f "$chroot_dir/opt/f-secure/fsaua/fsaua_config.template" ]; then - echo "F-Secure: Found" - echo "enable_fsma=no" >> "$chroot_dir/opt/f-secure/fsaua/fsaua_config.template" - echo "update_servers=http://fsbwserver-direct.f-secure.com" >> "$chroot_dir/opt/f-secure/fsaua/fsaua_config.template" - echo "update_proxies=http://$proxy_host:$proxy_port" >> "$chroot_dir/opt/f-secure/fsaua/fsaua_config.template" - echo "http_proxies=http://$proxy_host:$proxy_port" >> "$chroot_dir/opt/f-secure/fsaua/fsaua_config.template" - cat "$chroot_dir/opt/f-secure/fsaua/fsaua_config.template" > "$chroot_dir/etc/opt/f-secure/fsaua/fsaua_config" - else - eco "F-Secure: NOT Found" - fi + #F-Secure + if [ -f "$chroot_dir/opt/f-secure/fsaua/fsaua_config.template" ]; then + echo "F-Secure: Found" + echo "enable_fsma=no" >> "$chroot_dir/opt/f-secure/fsaua/fsaua_config.template" + echo "update_servers=http://fsbwserver-direct.f-secure.com" >> "$chroot_dir/opt/f-secure/fsaua/fsaua_config.template" + echo "update_proxies=http://$proxy_host:$proxy_port" >> "$chroot_dir/opt/f-secure/fsaua/fsaua_config.template" + echo "http_proxies=http://$proxy_host:$proxy_port" >> "$chroot_dir/opt/f-secure/fsaua/fsaua_config.template" + cat "$chroot_dir/opt/f-secure/fsaua/fsaua_config.template" > "$chroot_dir/etc/opt/f-secure/fsaua/fsaua_config" + else + eco "F-Secure: NOT Found" + fi - rm "$tmp_file_344532" - tmp_file_344532= + rm "$tmp_file_344532" + tmp_file_344532= - echo "done" + echo "done" } ### dns #dns_set [chroot_dir] [domain] [nameserver] function dns_set() { - echo -n "set dns config ... " + echo -n "set dns config ... " - rm "$chroot_dir/etc/resolv.conf" + rm "$chroot_dir/etc/resolv.conf" - [ "$2" != "" ] && echo "domain $2" >> "$chroot_dir/etc/resolv.conf" - echo "search $2" >> "$chroot_dir/etc/resolv.conf" - for namesv in `echo "$3" | tr "," " "`; do - echo "nameserver $namesv" >> "$chroot_dir/etc/resolv.conf" - done + [ "$2" != "" ] && echo "domain $2" >> "$chroot_dir/etc/resolv.conf" + echo "search $2" >> "$chroot_dir/etc/resolv.conf" + for namesv in `echo "$3" | tr "," " "`; do + echo "nameserver $namesv" >> "$chroot_dir/etc/resolv.conf" + done - echo "done" + echo "done" } ### source list #sourcelist_desinfect_set_nomal2015 [chroot_dir] function sourcelist_desinfect_set_nomal2015() { - echo -n "build normal source.list ... " - #$1 = chroot directory + echo -n "build normal source.list ... " + #$1 = chroot directory - sourcelist="$1/etc/apt/sources.list" + sourcelist="$1/etc/apt/sources.list" - echo "#### Desinfe't 2015 ####" > "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://www.heise.de/ct/projekte/desinfect/ubuntu 2015 main" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "# #### Ubuntu 14.04 (trusty) ####" >> "$sourcelist" - echo "#" >> "$sourcelist" - echo "# deb http://de.archive.ubuntu.com/ubuntu trusty main restricted universe multiverse" >> "$sourcelist" - echo "# deb-src http://de.archive.ubuntu.com/ubuntu trusty main restricted universe multiverse" >> "$sourcelist" - echo "#" >> "$sourcelist" - echo "# deb http://de.archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse" >> "$sourcelist" - echo "# deb-src http://de.archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse" >> "$sourcelist" - echo "#" >> "$sourcelist" - echo "# deb http://de.archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse" >> "$sourcelist" - echo "# deb-src http://de.archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse" >> "$sourcelist" - echo "#" >> "$sourcelist" - echo "# deb http://de.archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse" >> "$sourcelist" - echo "# deb-src http://de.archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse" >> "$sourcelist" - echo "#" >> "$sourcelist" - echo "# ## This software is not part of Ubuntu, but is offered by third-party" >> "$sourcelist" - echo "# ## developers who want to ship their latest software." >> "$sourcelist" - echo "# deb http://extras.ubuntu.com/ubuntu trusty main" >> "$sourcelist" + echo "#### Desinfe't 2015 ####" > "$sourcelist" + echo "" >> "$sourcelist" + echo "deb http://www.heise.de/ct/projekte/desinfect/ubuntu 2015 main" >> "$sourcelist" + echo "" >> "$sourcelist" + echo "" >> "$sourcelist" + echo "# #### Ubuntu 14.04 (trusty) ####" >> "$sourcelist" + echo "#" >> "$sourcelist" + echo "# deb http://de.archive.ubuntu.com/ubuntu trusty main restricted universe multiverse" >> "$sourcelist" + echo "# deb-src http://de.archive.ubuntu.com/ubuntu trusty main restricted universe multiverse" >> "$sourcelist" + echo "#" >> "$sourcelist" + echo "# deb http://de.archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse" >> "$sourcelist" + echo "# deb-src http://de.archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse" >> "$sourcelist" + echo "#" >> "$sourcelist" + echo "# deb http://de.archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse" >> "$sourcelist" + echo "# deb-src http://de.archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse" >> "$sourcelist" + echo "#" >> "$sourcelist" + echo "# deb http://de.archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse" >> "$sourcelist" + echo "# deb-src http://de.archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse" >> "$sourcelist" + echo "#" >> "$sourcelist" + echo "# ## This software is not part of Ubuntu, but is offered by third-party" >> "$sourcelist" + echo "# ## developers who want to ship their latest software." >> "$sourcelist" + echo "# deb http://extras.ubuntu.com/ubuntu trusty main" >> "$sourcelist" - echo "done" + echo "done" } #sourcelist_desinfect_set_nomal2016 [chroot_dir] function sourcelist_desinfect_set_nomal2016() { - echo -n "build normal source.list ... " - #$1 = chroot directory + echo -n "build normal source.list ... " + #$1 = chroot directory - sourcelist="$1/etc/apt/sources.list" + sourcelist="$1/etc/apt/sources.list" - echo "#### Desinfe't 2016 ####" > "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://www.heise.de/ct/projekte/desinfect/ubuntu 2016 main" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "# #### Ubuntu 14.04 (trusty) ####" >> "$sourcelist" - echo "#" >> "$sourcelist" - echo "# deb http://de.archive.ubuntu.com/ubuntu trusty main restricted universe multiverse" >> "$sourcelist" - echo "# deb-src http://de.archive.ubuntu.com/ubuntu trusty main restricted universe multiverse" >> "$sourcelist" - echo "#" >> "$sourcelist" - echo "# deb http://de.archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse" >> "$sourcelist" - echo "# deb-src http://de.archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse" >> "$sourcelist" - echo "#" >> "$sourcelist" - echo "# deb http://de.archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse" >> "$sourcelist" - echo "# deb-src http://de.archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse" >> "$sourcelist" - echo "#" >> "$sourcelist" - echo "# deb http://de.archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse" >> "$sourcelist" - echo "# deb-src http://de.archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse" >> "$sourcelist" - echo "#" >> "$sourcelist" - echo "# ## This software is not part of Ubuntu, but is offered by third-party" >> "$sourcelist" - echo "# ## developers who want to ship their latest software." >> "$sourcelist" - echo "# deb http://extras.ubuntu.com/ubuntu trusty main" >> "$sourcelist" + echo "#### Desinfe't 2016 ####" > "$sourcelist" + echo "" >> "$sourcelist" + echo "deb http://www.heise.de/ct/projekte/desinfect/ubuntu 2016 main" >> "$sourcelist" + echo "" >> "$sourcelist" + echo "" >> "$sourcelist" + echo "# #### Ubuntu 14.04 (trusty) ####" >> "$sourcelist" + echo "#" >> "$sourcelist" + echo "# deb http://de.archive.ubuntu.com/ubuntu trusty main restricted universe multiverse" >> "$sourcelist" + echo "# deb-src http://de.archive.ubuntu.com/ubuntu trusty main restricted universe multiverse" >> "$sourcelist" + echo "#" >> "$sourcelist" + echo "# deb http://de.archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse" >> "$sourcelist" + echo "# deb-src http://de.archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse" >> "$sourcelist" + echo "#" >> "$sourcelist" + echo "# deb http://de.archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse" >> "$sourcelist" + echo "# deb-src http://de.archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse" >> "$sourcelist" + echo "#" >> "$sourcelist" + echo "# deb http://de.archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse" >> "$sourcelist" + echo "# deb-src http://de.archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse" >> "$sourcelist" + echo "#" >> "$sourcelist" + echo "# ## This software is not part of Ubuntu, but is offered by third-party" >> "$sourcelist" + echo "# ## developers who want to ship their latest software." >> "$sourcelist" + echo "# deb http://extras.ubuntu.com/ubuntu trusty main" >> "$sourcelist" - echo "done" + echo "done" } #sourcelist_desinfect_set_nomal2017 [chroot_dir] function sourcelist_desinfect_set_nomal2017() { - echo -n "build normal source.list ... " - #$1 = chroot directory + echo -n "build normal source.list ... " + #$1 = chroot directory - sourcelist="$1/etc/apt/sources.list" + sourcelist="$1/etc/apt/sources.list" - echo "#### Desinfe't 2017 ####" > "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://www.heise.de/ct/projekte/desinfect/ubuntu 2017 main" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "# #### Ubuntu 16.04 LTS (Xenial) ####" >> "$sourcelist" - echo "#" >> "$sourcelist" - echo "# deb http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse" >> "$sourcelist" - echo "# deb-src http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse" >> "$sourcelist" - echo "#" >> "$sourcelist" - echo "# deb http://security.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse" >> "$sourcelist" - echo "# deb-src http://security.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse" >> "$sourcelist" - echo "#" >> "$sourcelist" - echo "# deb http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse" >> "$sourcelist" - echo "# deb-src http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse" >> "$sourcelist" - echo "#" >> "$sourcelist" - echo "# ## This software is not part of Ubuntu, but is offered by third-party" >> "$sourcelist" - echo "# ## developers who want to ship their latest software." >> "$sourcelist" - echo "# deb http://extras.ubuntu.com/ubuntu xenial main" >> "$sourcelist" + echo "#### Desinfe't 2017 ####" > "$sourcelist" + echo "" >> "$sourcelist" + echo "deb http://www.heise.de/ct/projekte/desinfect/ubuntu 2017 main" >> "$sourcelist" + echo "" >> "$sourcelist" + echo "" >> "$sourcelist" + echo "# #### Ubuntu 16.04 LTS (Xenial) ####" >> "$sourcelist" + echo "#" >> "$sourcelist" + echo "# deb http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse" >> "$sourcelist" + echo "# deb-src http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse" >> "$sourcelist" + echo "#" >> "$sourcelist" + echo "# deb http://security.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse" >> "$sourcelist" + echo "# deb-src http://security.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse" >> "$sourcelist" + echo "#" >> "$sourcelist" + echo "# deb http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse" >> "$sourcelist" + echo "# deb-src http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse" >> "$sourcelist" + echo "#" >> "$sourcelist" + echo "# ## This software is not part of Ubuntu, but is offered by third-party" >> "$sourcelist" + echo "# ## developers who want to ship their latest software." >> "$sourcelist" + echo "# deb http://extras.ubuntu.com/ubuntu xenial main" >> "$sourcelist" - echo "done" + echo "done" } #sourcelist_desinfect_set_extendet2015 [chroot_dir] function sourcelist_desinfect_set_extendet2015() { - echo -n "build extendet source.list ... " + echo -n "build extendet source.list ... " - sourcelist="$1/etc/apt/sources.list" + sourcelist="$1/etc/apt/sources.list" - echo "#### Desinfe't 2015 ####" > "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://www.heise.de/ct/projekte/desinfect/ubuntu 2015 main" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "#### Ubuntu 14.04 (trusty) ####" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://de.archive.ubuntu.com/ubuntu trusty main restricted universe multiverse" >> "$sourcelist" - echo "deb-src http://de.archive.ubuntu.com/ubuntu trusty main restricted universe multiverse" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://de.archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse" >> "$sourcelist" - echo "deb-src http://de.archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://de.archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse" >> "$sourcelist" - echo "deb-src http://de.archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://de.archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse" >> "$sourcelist" - echo "deb-src http://de.archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "## This software is not part of Ubuntu, but is offered by third-party" >> "$sourcelist" - echo "## developers who want to ship their latest software." >> "$sourcelist" - echo "deb http://extras.ubuntu.com/ubuntu trusty main" >> "$sourcelist" + echo "#### Desinfe't 2015 ####" > "$sourcelist" + echo "" >> "$sourcelist" + echo "deb http://www.heise.de/ct/projekte/desinfect/ubuntu 2015 main" >> "$sourcelist" + echo "" >> "$sourcelist" + echo "" >> "$sourcelist" + echo "#### Ubuntu 14.04 (trusty) ####" >> "$sourcelist" + echo "" >> "$sourcelist" + echo "deb http://de.archive.ubuntu.com/ubuntu trusty main restricted universe multiverse" >> "$sourcelist" + echo "deb-src http://de.archive.ubuntu.com/ubuntu trusty main restricted universe multiverse" >> "$sourcelist" + echo "" >> "$sourcelist" + echo "deb http://de.archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse" >> "$sourcelist" + echo "deb-src http://de.archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse" >> "$sourcelist" + echo "" >> "$sourcelist" + echo "deb http://de.archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse" >> "$sourcelist" + echo "deb-src http://de.archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse" >> "$sourcelist" + echo "" >> "$sourcelist" + echo "deb http://de.archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse" >> "$sourcelist" + echo "deb-src http://de.archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse" >> "$sourcelist" + echo "" >> "$sourcelist" + echo "## This software is not part of Ubuntu, but is offered by third-party" >> "$sourcelist" + echo "## developers who want to ship their latest software." >> "$sourcelist" + echo "deb http://extras.ubuntu.com/ubuntu trusty main" >> "$sourcelist" - echo "done" + echo "done" } #sourcelist_desinfect_set_extendet2016 [chroot_dir] function sourcelist_desinfect_set_extendet2016() { - echo -n "build extendet source.list ... " + echo -n "build extendet source.list ... " - sourcelist="$1/etc/apt/sources.list" + sourcelist="$1/etc/apt/sources.list" - echo "#### Desinfe't 2016 ####" > "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://www.heise.de/ct/projekte/desinfect/ubuntu 2016 main" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "#### Ubuntu 14.04 (trusty) ####" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://de.archive.ubuntu.com/ubuntu trusty main restricted universe multiverse" >> "$sourcelist" - echo "deb-src http://de.archive.ubuntu.com/ubuntu trusty main restricted universe multiverse" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://de.archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse" >> "$sourcelist" - echo "deb-src http://de.archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://de.archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse" >> "$sourcelist" - echo "deb-src http://de.archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://de.archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse" >> "$sourcelist" - echo "deb-src http://de.archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "## This software is not part of Ubuntu, but is offered by third-party" >> "$sourcelist" - echo "## developers who want to ship their latest software." >> "$sourcelist" - echo "deb http://extras.ubuntu.com/ubuntu trusty main" >> "$sourcelist" + echo "#### Desinfe't 2016 ####" > "$sourcelist" + echo "" >> "$sourcelist" + echo "deb http://www.heise.de/ct/projekte/desinfect/ubuntu 2016 main" >> "$sourcelist" + echo "" >> "$sourcelist" + echo "" >> "$sourcelist" + echo "#### Ubuntu 14.04 (trusty) ####" >> "$sourcelist" + echo "" >> "$sourcelist" + echo "deb http://de.archive.ubuntu.com/ubuntu trusty main restricted universe multiverse" >> "$sourcelist" + echo "deb-src http://de.archive.ubuntu.com/ubuntu trusty main restricted universe multiverse" >> "$sourcelist" + echo "" >> "$sourcelist" + echo "deb http://de.archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse" >> "$sourcelist" + echo "deb-src http://de.archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse" >> "$sourcelist" + echo "" >> "$sourcelist" + echo "deb http://de.archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse" >> "$sourcelist" + echo "deb-src http://de.archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse" >> "$sourcelist" + echo "" >> "$sourcelist" + echo "deb http://de.archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse" >> "$sourcelist" + echo "deb-src http://de.archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse" >> "$sourcelist" + echo "" >> "$sourcelist" + echo "## This software is not part of Ubuntu, but is offered by third-party" >> "$sourcelist" + echo "## developers who want to ship their latest software." >> "$sourcelist" + echo "deb http://extras.ubuntu.com/ubuntu trusty main" >> "$sourcelist" - echo "done" + echo "done" } #sourcelist_desinfect_set_extendet2017 [chroot_dir] function sourcelist_desinfect_set_extendet2017() { - echo -n "build extendet source.list ... " + echo -n "build extendet source.list ... " - sourcelist="$1/etc/apt/sources.list" + sourcelist="$1/etc/apt/sources.list" - echo "#### Desinfe't 2017 ####" > "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://www.heise.de/ct/projekte/desinfect/ubuntu 2017 main" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "#### Ubuntu 16.04 LTS (Xenial) ####" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse" >> "$sourcelist" - echo "deb-src http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://security.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse" >> "$sourcelist" - echo "deb-src http://security.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse" >> "$sourcelist" - echo "deb-src http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "## This software is not part of Ubuntu, but is offered by third-party" >> "$sourcelist" - echo "## developers who want to ship their latest software." >> "$sourcelist" - echo "deb http://extras.ubuntu.com/ubuntu xenial main" >> "$sourcelist" + echo "#### Desinfe't 2017 ####" > "$sourcelist" + echo "" >> "$sourcelist" + echo "deb http://www.heise.de/ct/projekte/desinfect/ubuntu 2017 main" >> "$sourcelist" + echo "" >> "$sourcelist" + echo "" >> "$sourcelist" + echo "#### Ubuntu 16.04 LTS (Xenial) ####" >> "$sourcelist" + echo "" >> "$sourcelist" + echo "deb http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse" >> "$sourcelist" + echo "deb-src http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse" >> "$sourcelist" + echo "" >> "$sourcelist" + echo "deb http://security.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse" >> "$sourcelist" + echo "deb-src http://security.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse" >> "$sourcelist" + echo "" >> "$sourcelist" + echo "deb http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse" >> "$sourcelist" + echo "deb-src http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse" >> "$sourcelist" + echo "" >> "$sourcelist" + echo "## This software is not part of Ubuntu, but is offered by third-party" >> "$sourcelist" + echo "## developers who want to ship their latest software." >> "$sourcelist" + echo "deb http://extras.ubuntu.com/ubuntu xenial main" >> "$sourcelist" - echo "done" + echo "done" } ### Update ### @@ -1098,216 +1098,216 @@ function sourcelist_desinfect_set_extendet2017() { #os_update_desinfect2015 [chroot_dir] function os_update_desinfect2015() { - #$1 = chroot directory + #$1 = chroot directory - chroot_dir="$1" + chroot_dir="$1" - #call main os_update - os_update "$chroot_dir" + #call main os_update + os_update "$chroot_dir" - echo "update virus definitions ... " + echo "update virus definitions ... " - #BitDefender - chroot "$chroot_dir" /bin/bash -c "bdscan --update" | grep -v "... updated" + #BitDefender + chroot "$chroot_dir" /bin/bash -c "bdscan --update" | grep -v "... updated" - #Avast Avira - chroot "$chroot_dir" /bin/bash -c "/AntiVirUpdate/avupdate" | grep -v " -> " + #Avast Avira + chroot "$chroot_dir" /bin/bash -c "/AntiVirUpdate/avupdate" | grep -v " -> " - #Clam AV - chroot "$chroot_dir" /bin/bash -c "freshclam" > /dev/null - rm -f "$chroot_dir/var/lib/clamav/daily.cld" + #Clam AV + chroot "$chroot_dir" /bin/bash -c "freshclam" > /dev/null + rm -f "$chroot_dir/var/lib/clamav/daily.cld" - #Karspersky - echo '#!/bin/bash' > "$chroot_dir/tmp/up_kasp" - echo 'PATH=/usr/lib/kl:$PATH' >> "$chroot_dir/tmp/up_kasp" - echo 'LD_LIBRARY_PATH=/usr/lib/kl:$LD_LIBRARY_PATH' >> "$chroot_dir/tmp/up_kasp" - echo 'KL_PLUGINS_PATH=/usr/lib/kl' >> "$chroot_dir/tmp/up_kasp" - echo 'export PATH LD_LIBRARY_PATH KL_PLUGINS_PATH' >> "$chroot_dir/tmp/up_kasp" - echo '/usr/lib/kl/kav update' >> "$chroot_dir/tmp/up_kasp" - chmod +x "$chroot_dir/tmp/up_kasp" - chroot "$chroot_dir" /bin/bash -c "/tmp/up_kasp" | grep -v ".kdc" | grep -v "File downloaded" - rm "$chroot_dir/tmp/up_kasp" + #Karspersky + echo '#!/bin/bash' > "$chroot_dir/tmp/up_kasp" + echo 'PATH=/usr/lib/kl:$PATH' >> "$chroot_dir/tmp/up_kasp" + echo 'LD_LIBRARY_PATH=/usr/lib/kl:$LD_LIBRARY_PATH' >> "$chroot_dir/tmp/up_kasp" + echo 'KL_PLUGINS_PATH=/usr/lib/kl' >> "$chroot_dir/tmp/up_kasp" + echo 'export PATH LD_LIBRARY_PATH KL_PLUGINS_PATH' >> "$chroot_dir/tmp/up_kasp" + echo '/usr/lib/kl/kav update' >> "$chroot_dir/tmp/up_kasp" + chmod +x "$chroot_dir/tmp/up_kasp" + chroot "$chroot_dir" /bin/bash -c "/tmp/up_kasp" | grep -v ".kdc" | grep -v "File downloaded" + rm "$chroot_dir/tmp/up_kasp" - echo "done" + echo "done" } #os_update_desinfect2016 [chroot_dir] function os_update_desinfect2016() { - #$1 = chroot directory + #$1 = chroot directory - chroot_dir="$1" + chroot_dir="$1" - #call main os_update - os_update "$chroot_dir" + #call main os_update + os_update "$chroot_dir" - echo "update virus definitions ... " + echo "update virus definitions ... " - #Avast Avira - { - echo "Avira ..." - chroot "$chroot_dir" /bin/bash -c "/AntiVirUpdate/avupdate" | grep -v " -> " - echo "Avira done" - } + #Avast Avira + { + echo "Avira ..." + chroot "$chroot_dir" /bin/bash -c "/AntiVirUpdate/avupdate" | grep -v " -> " + echo "Avira done" + } - #Clam AV - { - echo "ClamAV..." - chroot "$chroot_dir" /bin/bash -c "freshclam" > /dev/null - rm -f "$chroot_dir/var/lib/clamav/daily.cld" - echo "ClamAV done" - } + #Clam AV + { + echo "ClamAV..." + chroot "$chroot_dir" /bin/bash -c "freshclam" > /dev/null + rm -f "$chroot_dir/var/lib/clamav/daily.cld" + echo "ClamAV done" + } - #Eset AV - { - echo "Eset AV ..." - tmp_file_23421="`mktemp`" - cat "$chroot_dir/etc/opt/eset/esets/esets.cfg" | grep -v "av_update_username" | grep -v "av_update_password" > "$tmp_file_23421" - cat "$tmp_file_23421" > "$chroot_dir/etc/opt/eset/esets/esets.cfg" - chroot "$chroot_dir" /bin/bash -c "/usr/bin/esetrand" >> "$chroot_dir/etc/opt/eset/esets/esets.cfg" + #Eset AV + { + echo "Eset AV ..." + tmp_file_23421="`mktemp`" + cat "$chroot_dir/etc/opt/eset/esets/esets.cfg" | grep -v "av_update_username" | grep -v "av_update_password" > "$tmp_file_23421" + cat "$tmp_file_23421" > "$chroot_dir/etc/opt/eset/esets/esets.cfg" + chroot "$chroot_dir" /bin/bash -c "/usr/bin/esetrand" >> "$chroot_dir/etc/opt/eset/esets/esets.cfg" - echo "set timeout: 2min" - av_eaet_timeout=1200 - tmp_var_3092="`chroot "$chroot_dir" /bin/bash -c "/opt/desinfect/conky_info.sh eset"`" + echo "set timeout: 2min" + av_eaet_timeout=1200 + tmp_var_3092="`chroot "$chroot_dir" /bin/bash -c "/opt/desinfect/conky_info.sh eset"`" - #eig. update routine - chroot "$chroot_dir" /bin/bash -c "/etc/init.d/esets restart" - sleep 2 - chroot "$chroot_dir" /bin/bash -c "/opt/eset/esets/sbin/esets_daemon --update" + #eig. update routine + chroot "$chroot_dir" /bin/bash -c "/etc/init.d/esets restart" + sleep 2 + chroot "$chroot_dir" /bin/bash -c "/opt/eset/esets/sbin/esets_daemon --update" - #warten auf daemon update ... - sleep 10m - echo "wait 10min for Eset AV update" - while [ "`chroot "$chroot_dir" /bin/bash -c "/opt/desinfect/conky_info.sh eset"`" == "$tmp_var_3092" ]; do - sleep 1 - av_eaet_timeout=$((av_eaet_timeout-1)) - [ $av_eaet_timeout -gt 0 ] || tmp_var_3092= - done + #warten auf daemon update ... + sleep 10m + echo "wait 10min for Eset AV update" + while [ "`chroot "$chroot_dir" /bin/bash -c "/opt/desinfect/conky_info.sh eset"`" == "$tmp_var_3092" ]; do + sleep 1 + av_eaet_timeout=$((av_eaet_timeout-1)) + [ $av_eaet_timeout -gt 0 ] || tmp_var_3092= + done - sleep 4 + sleep 4 - chroot "$chroot_dir" /bin/bash -c "/etc/init.d/esets stop" + chroot "$chroot_dir" /bin/bash -c "/etc/init.d/esets stop" - cat "$tmp_file_23421" > "$chroot_dir/etc/opt/eset/esets/esets.cfg" + cat "$tmp_file_23421" > "$chroot_dir/etc/opt/eset/esets/esets.cfg" - rm "$tmp_file_23421" - tmp_file_23421= - tmp_var_3092= - echo "Eset AV done" - } + rm "$tmp_file_23421" + tmp_file_23421= + tmp_var_3092= + echo "Eset AV done" + } - #Karspersky - { - echo "Karspersky ..." - #gen update-scrypt - echo '#!/bin/bash' > "$chroot_dir/tmp/up_kasp" - echo 'PATH=/usr/lib/kl:$PATH' >> "$chroot_dir/tmp/up_kasp" - echo 'LD_LIBRARY_PATH=/usr/lib/kl:$LD_LIBRARY_PATH' >> "$chroot_dir/tmp/up_kasp" - echo 'KL_PLUGINS_PATH=/usr/lib/kl' >> "$chroot_dir/tmp/up_kasp" - echo 'export PATH LD_LIBRARY_PATH KL_PLUGINS_PATH' >> "$chroot_dir/tmp/up_kasp" - echo '/usr/lib/kl/kav update' >> "$chroot_dir/tmp/up_kasp" - chmod +x "$chroot_dir/tmp/up_kasp" + #Karspersky + { + echo "Karspersky ..." + #gen update-scrypt + echo '#!/bin/bash' > "$chroot_dir/tmp/up_kasp" + echo 'PATH=/usr/lib/kl:$PATH' >> "$chroot_dir/tmp/up_kasp" + echo 'LD_LIBRARY_PATH=/usr/lib/kl:$LD_LIBRARY_PATH' >> "$chroot_dir/tmp/up_kasp" + echo 'KL_PLUGINS_PATH=/usr/lib/kl' >> "$chroot_dir/tmp/up_kasp" + echo 'export PATH LD_LIBRARY_PATH KL_PLUGINS_PATH' >> "$chroot_dir/tmp/up_kasp" + echo '/usr/lib/kl/kav update' >> "$chroot_dir/tmp/up_kasp" + chmod +x "$chroot_dir/tmp/up_kasp" - chroot "$chroot_dir" /bin/bash -c "/tmp/up_kasp" | grep -v ".kdc" | grep -v "File downloaded" - rm "$chroot_dir/tmp/up_kasp" - echo "Karspersky done" - } + chroot "$chroot_dir" /bin/bash -c "/tmp/up_kasp" | grep -v ".kdc" | grep -v "File downloaded" + rm "$chroot_dir/tmp/up_kasp" + echo "Karspersky done" + } - echo "update virus definitions done" + echo "update virus definitions done" } #os_update_desinfect2017 [chroot_dir] function os_update_desinfect2017() { - #$1 = chroot directory + #$1 = chroot directory - chroot_dir="$1" + chroot_dir="$1" - #call main os_update - os_update "$chroot_dir" + #call main os_update + os_update "$chroot_dir" - echo "update virus definitions ... " + echo "update virus definitions ... " - #Avast Avira - { - echo "Avira ..." - #chroot "$chroot_dir" /bin/bash --login -c ". /tmp/env.sh; /AntiVirUpdate/avupdate" | grep -v " -> " - chroot_sh "$chroot_dir" "/AntiVirUpdate/avupdate" | grep -v " -> " - echo "Avira done" - } + #Avast Avira + { + echo "Avira ..." + #chroot "$chroot_dir" /bin/bash --login -c ". /tmp/env.sh; /AntiVirUpdate/avupdate" | grep -v " -> " + chroot_sh "$chroot_dir" "/AntiVirUpdate/avupdate" | grep -v " -> " + echo "Avira done" + } - #Clam AV - { - echo "ClamAV..." - #chroot "$chroot_dir" /bin/bash --login -c ". /tmp/env.sh; freshclam" > /dev/null - chroot_sh "$chroot_dir" "freshclam" > /dev/null - rm -f "$chroot_dir/var/lib/clamav/daily.cld" - echo "ClamAV done" - } + #Clam AV + { + echo "ClamAV..." + #chroot "$chroot_dir" /bin/bash --login -c ". /tmp/env.sh; freshclam" > /dev/null + chroot_sh "$chroot_dir" "freshclam" > /dev/null + rm -f "$chroot_dir/var/lib/clamav/daily.cld" + echo "ClamAV done" + } - #Eset AV - { - echo "Eset AV ..." - tmp_file_23421="`mktemp`" - cat "$chroot_dir/etc/opt/eset/esets/esets.cfg" | grep -v "av_update_username" | grep -v "av_update_password" > "$tmp_file_23421" - cat "$tmp_file_23421" > "$chroot_dir/etc/opt/eset/esets/esets.cfg" - chroot "$chroot_dir" /bin/bash -c "/usr/bin/esetrand" >> "$chroot_dir/etc/opt/eset/esets/esets.cfg" + #Eset AV + { + echo "Eset AV ..." + tmp_file_23421="`mktemp`" + cat "$chroot_dir/etc/opt/eset/esets/esets.cfg" | grep -v "av_update_username" | grep -v "av_update_password" > "$tmp_file_23421" + cat "$tmp_file_23421" > "$chroot_dir/etc/opt/eset/esets/esets.cfg" + chroot "$chroot_dir" /bin/bash -c "/usr/bin/esetrand" >> "$chroot_dir/etc/opt/eset/esets/esets.cfg" - av_eaet_timeout=300 - echo "set timeout: $((av_eaet_timeout/60))min" - tmp_var_3092="`chroot "$chroot_dir" /bin/bash -c "/opt/desinfect/conky_info.sh eset"`" + av_eaet_timeout=300 + echo "set timeout: $((av_eaet_timeout/60))min" + tmp_var_3092="`chroot "$chroot_dir" /bin/bash -c "/opt/desinfect/conky_info.sh eset"`" - #eig. update routine - #chroot "$chroot_dir" /bin/bash -c "/etc/init.d/esets restart" - chroot_sh "$chroot_dir" "/etc/init.d/esets restart" - sleep 2 - #chroot "$chroot_dir" /bin/bash --login -c "/opt/eset/esets/sbin/esets_daemon --update" - chroot_sh "$chroot_dir" "/opt/eset/esets/sbin/esets_daemon --update" + #eig. update routine + #chroot "$chroot_dir" /bin/bash -c "/etc/init.d/esets restart" + chroot_sh "$chroot_dir" "/etc/init.d/esets restart" + sleep 2 + #chroot "$chroot_dir" /bin/bash --login -c "/opt/eset/esets/sbin/esets_daemon --update" + chroot_sh "$chroot_dir" "/opt/eset/esets/sbin/esets_daemon --update" - #warten auf daemon update ... - echo "wait $((av_eaet_timeout/60))min for Eset AV update" - while [ "`chroot "$chroot_dir" /bin/bash -c "/opt/desinfect/conky_info.sh eset"`" == "$tmp_var_3092" ]; do - sleep 10 - av_eaet_timeout=$((av_eaet_timeout-10)) - [ $av_eaet_timeout -gt 0 ] || tmp_var_3092= - done + #warten auf daemon update ... + echo "wait $((av_eaet_timeout/60))min for Eset AV update" + while [ "`chroot "$chroot_dir" /bin/bash -c "/opt/desinfect/conky_info.sh eset"`" == "$tmp_var_3092" ]; do + sleep 10 + av_eaet_timeout=$((av_eaet_timeout-10)) + [ $av_eaet_timeout -gt 0 ] || tmp_var_3092= + done - sleep 4 + sleep 4 - #chroot "$chroot_dir" /bin/bash -c "/etc/init.d/esets stop" - chroot_sh "$chroot_dir" "/etc/init.d/esets stop" + #chroot "$chroot_dir" /bin/bash -c "/etc/init.d/esets stop" + chroot_sh "$chroot_dir" "/etc/init.d/esets stop" - cat "$tmp_file_23421" > "$chroot_dir/etc/opt/eset/esets/esets.cfg" + cat "$tmp_file_23421" > "$chroot_dir/etc/opt/eset/esets/esets.cfg" - rm "$tmp_file_23421" - tmp_file_23421= - tmp_var_3092= - echo "Eset AV done" - } + rm "$tmp_file_23421" + tmp_file_23421= + tmp_var_3092= + echo "Eset AV done" + } - #Sophos - { - echo "Sophos..." - #chroot "$chroot_dir" /bin/bash --login -c "/opt/sophos-av/bin/savupdate -v3" - chroot_sh "$chroot_dir" "/opt/sophos-av/bin/savupdate -v3" - chroot_sh "$chroot_dir" "/opt/sophos-av/bin/savdstatus --version" - #chroot "$chroot_dir" /bin/bash -c "/opt/sophos-av/bin/savupdate -v3 -a" - echo "Sophos done" - } + #Sophos + { + echo "Sophos..." + #chroot "$chroot_dir" /bin/bash --login -c "/opt/sophos-av/bin/savupdate -v3" + chroot_sh "$chroot_dir" "/opt/sophos-av/bin/savupdate -v3" + chroot_sh "$chroot_dir" "/opt/sophos-av/bin/savdstatus --version" + #chroot "$chroot_dir" /bin/bash -c "/opt/sophos-av/bin/savupdate -v3 -a" + echo "Sophos done" + } - #F-Secure - { - echo "F-Secure..." - chroot_sh "$chroot_dir" "/etc/init.d/fsaua start" - chroot_sh "$chroot_dir" "/etc/init.d/fsupdate stop" - ( sleep 1m; chroot_sh "$chroot_dir" "/etc/init.d/fsaua start" ) & - chroot_sh "$chroot_dir" "/opt/f-secure/fssp/bin/dbupdate_lite" && echo "Update Success" - sleep 1m - chroot_sh "$chroot_dir" "/etc/init.d/fsaua stop" - chroot_sh "$chroot_dir" "/etc/init.d/fsupdate stop" - echo "F-Secure done" - } + #F-Secure + { + echo "F-Secure..." + chroot_sh "$chroot_dir" "/etc/init.d/fsaua start" + chroot_sh "$chroot_dir" "/etc/init.d/fsupdate stop" + ( sleep 1m; chroot_sh "$chroot_dir" "/etc/init.d/fsaua start" ) & + chroot_sh "$chroot_dir" "/opt/f-secure/fssp/bin/dbupdate_lite" && echo "Update Success" + sleep 1m + chroot_sh "$chroot_dir" "/etc/init.d/fsaua stop" + chroot_sh "$chroot_dir" "/etc/init.d/fsupdate stop" + echo "F-Secure done" + } - echo "update virus definitions done" + echo "update virus definitions done" } @@ -1318,35 +1318,35 @@ function os_update_desinfect2017() { #tools_add_desinfect2015 [chroot_dir] [tools_list] function tools_add_desinfect2015() { - #$1 = chroot directory - chroot_dir="$1" - tools_list="$2" + #$1 = chroot directory + chroot_dir="$1" + tools_list="$2" - sourcelist_desinfect_set_extendet2015 "$chroot_dir" - tools_add "$chroot_dir" "$tools_list" - sourcelist_desinfect_set_nomal2015 "$chroot_dir" + sourcelist_desinfect_set_extendet2015 "$chroot_dir" + tools_add "$chroot_dir" "$tools_list" + sourcelist_desinfect_set_nomal2015 "$chroot_dir" } #tools_add_desinfect2016 [chroot_dir] [tools_list] function tools_add_desinfect2016() { - #$1 = chroot directory - chroot_dir="$1" - tools_list="$2" + #$1 = chroot directory + chroot_dir="$1" + tools_list="$2" - sourcelist_desinfect_set_extendet2016 "$chroot_dir" - tools_add "$chroot_dir" "$tools_list" - sourcelist_desinfect_set_nomal2016 "$chroot_dir" + sourcelist_desinfect_set_extendet2016 "$chroot_dir" + tools_add "$chroot_dir" "$tools_list" + sourcelist_desinfect_set_nomal2016 "$chroot_dir" } #tools_add_desinfect2017 [chroot_dir] [tools_list] function tools_add_desinfect2017() { - #$1 = chroot directory - chroot_dir="$1" - tools_list="$2" + #$1 = chroot directory + chroot_dir="$1" + tools_list="$2" - sourcelist_desinfect_set_extendet2017 "$chroot_dir" - tools_add "$chroot_dir" "$tools_list" - sourcelist_desinfect_set_nomal2017 "$chroot_dir" + sourcelist_desinfect_set_extendet2017 "$chroot_dir" + tools_add "$chroot_dir" "$tools_list" + sourcelist_desinfect_set_nomal2017 "$chroot_dir" } source /proj/desinfect.17 @@ -1355,7 +1355,7 @@ source /proj/desinfect.17 #wenn kein modus angegebnen: default modus if [ -z "$1" ]; then - main_$modus_default + main_$modus_default else - main_$1 $2 $3 $4 $5 $6 $7 $8 $9 + main_$1 $2 $3 $4 $5 $6 $7 $8 $9 fi From 801da8e4af160ce533c364dcc4b65b89c55ecc5d Mon Sep 17 00:00:00 2001 From: 6543 Date: Mon, 7 May 2018 01:09:19 +0200 Subject: [PATCH 12/38] source cant use variables (p2) --- autogen.sh | 39 +++++++++++++++------------------------ 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/autogen.sh b/autogen.sh index 181dc9a..bfa4e18 100755 --- a/autogen.sh +++ b/autogen.sh @@ -8,41 +8,32 @@ [ -n "$1" ] && mode=debug # install | clean | debug -case -ROOTDIR=build +function clean() { echo "clear build" -[ -d $ROOTDIR ] && rm -v -R $ROOTDIR -mkdir $ROOTDIR +[ -d build ] && rm -v -R build +mkdir build +} -###################### +function build() { +echo "build ..." ## skripte copieren ## -###################### - -echo "copy files" - # remaster -mkdir -p $ROOTDIR/usr/bin/ -cp -v src/remaster.sh $ROOTDIR/usr/bin/remaster -chmod +x $ROOTDIR/usr/bin/remaster +mkdir -p build/usr/bin/ +cp -v src/remaster.sh build/usr/bin/remaster +chmod +x build/usr/bin/remaster # modules -mkdir -p $ROOTDIR/usr/lib/remaster/ +mkdir -p build/usr/lib/remaster/ for i in proj func mods; do - mkdir -p $ROOTDIR/usr/lib/remaster/$i - cp -v src/$i/* $ROOTDIR/usr/lib/remaster/$i/ + mkdir -p build/usr/lib/remaster/$i + cp -v src/$i/* build/usr/lib/remaster/$i/ done # setting -mkdir -p $ROOTDIR/etc/remaster/ -cp -v src/config.sample.cfg $ROOTDIR/etc/remaster/config.sample.cfg +mkdir -p build/etc/remaster/ +cp -v src/config.sample.cfg build/etc/remaster/config.sample.cfg - -# Pfade anpassen -#sed ... - - -#mkdeb... -#not jet +} case "$1" in From b6eb652c50a7994614989fe0c3cd73b06995a884 Mon Sep 17 00:00:00 2001 From: 6543 Date: Mon, 7 May 2018 01:11:25 +0200 Subject: [PATCH 13/38] atom-beautify --- autogen.sh | 52 ++++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/autogen.sh b/autogen.sh index bfa4e18..0ca8a58 100755 --- a/autogen.sh +++ b/autogen.sh @@ -9,44 +9,44 @@ # install | clean | debug function clean() { -echo "clear build" -[ -d build ] && rm -v -R build -mkdir build + echo "clear build" + [ -d build ] && rm -v -R build + mkdir build } function build() { -echo "build ..." -## skripte copieren ## -# remaster -mkdir -p build/usr/bin/ -cp -v src/remaster.sh build/usr/bin/remaster -chmod +x build/usr/bin/remaster + echo "build ..." + ## skripte copieren ## + # remaster + mkdir -p build/usr/bin/ + cp -v src/remaster.sh build/usr/bin/remaster + chmod +x build/usr/bin/remaster -# modules -mkdir -p build/usr/lib/remaster/ -for i in proj func mods; do - mkdir -p build/usr/lib/remaster/$i - cp -v src/$i/* build/usr/lib/remaster/$i/ -done + # modules + mkdir -p build/usr/lib/remaster/ + for i in proj func mods; do + mkdir -p build/usr/lib/remaster/$i + cp -v src/$i/* build/usr/lib/remaster/$i/ + done -# setting -mkdir -p build/etc/remaster/ -cp -v src/config.sample.cfg build/etc/remaster/config.sample.cfg + # setting + mkdir -p build/etc/remaster/ + cp -v src/config.sample.cfg build/etc/remaster/config.sample.cfg } case "$1" in install) - install || exit 1 - ;; + install || exit 1 + ;; clean) - clean || exit 1 - ;; + clean || exit 1 + ;; debug) - debug || exit 1 - ;; + debug || exit 1 + ;; *) - echo "Usage: install | clean | debug" - exit 1 + echo "Usage: install | clean | debug" + exit 1 esac From 1aff83904cffc5a8c3ed556b0ca326b149531000 Mon Sep 17 00:00:00 2001 From: 6543 Date: Mon, 7 May 2018 01:30:50 +0200 Subject: [PATCH 14/38] source cant use variables (p3) --- autogen.sh | 27 +++++++++++++++++++++++++++ src/remaster.sh | 2 +- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/autogen.sh b/autogen.sh index 0ca8a58..6cce94d 100755 --- a/autogen.sh +++ b/autogen.sh @@ -35,6 +35,33 @@ function build() { } +function set_rootdir() { + sed -i "s//$1/g" build/usr/bin/remaster + for i in proj func mods; do + sed -i "s//$1/g" build/usr/lib/remaster/$i/* + done +} +function set_libdir() { + sed -i "s//$1/g" build/usr/bin/remaster + for i in proj func mods; do + sed -i "s//$1/g" build/usr/lib/remaster/$i/* + done +} + +function debug() { + clean + build + set_rootdir "`pwd`/build" + set_libdir "`pwd`/build/usr/lib/remaster" +} + +function install() { + clean + build + set_rootdir "" + set_libdir "/usr/lib/remaster" + #cp -f -r build/* / +} case "$1" in install) diff --git a/src/remaster.sh b/src/remaster.sh index bae0df4..f4b85e3 100755 --- a/src/remaster.sh +++ b/src/remaster.sh @@ -10,7 +10,7 @@ #set functions [ -d "" ] || { - echo "ERROR functions not found" + echo "ERROR Librarys not found" exit 1 } From 80d8a9bedf2219207c6577aa398641936c85a665 Mon Sep 17 00:00:00 2001 From: 6543 Date: Mon, 7 May 2018 01:34:59 +0200 Subject: [PATCH 15/38] code format --- autogen.sh | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/autogen.sh b/autogen.sh index 6cce94d..39f649f 100755 --- a/autogen.sh +++ b/autogen.sh @@ -1,19 +1,12 @@ #!/bin/bash # at the moment only generate dir structure in /build -#################### -## set enviroment ## -#################### - -[ -n "$1" ] && mode=debug -# install | clean | debug - +#make ... function clean() { echo "clear build" [ -d build ] && rm -v -R build mkdir build } - function build() { echo "build ..." ## skripte copieren ## @@ -35,6 +28,7 @@ function build() { } +#config ... function set_rootdir() { sed -i "s//$1/g" build/usr/bin/remaster for i in proj func mods; do @@ -48,13 +42,13 @@ function set_libdir() { done } +#modes function debug() { clean build set_rootdir "`pwd`/build" set_libdir "`pwd`/build/usr/lib/remaster" } - function install() { clean build @@ -63,6 +57,7 @@ function install() { #cp -f -r build/* / } + case "$1" in install) install || exit 1 @@ -73,7 +68,10 @@ case "$1" in debug) debug || exit 1 ;; + build) + build || exit 1 + ;; *) - echo "Usage: install | clean | debug" + echo "Usage: install | clean | debug | build" exit 1 esac From 6616478014de7a23021252974f8063344218e8c3 Mon Sep 17 00:00:00 2001 From: 6543 Date: Mon, 7 May 2018 01:49:19 +0200 Subject: [PATCH 16/38] source cant use variables (p4) --- src/func/check_dependency | 3 +-- src/func/check_user | 3 +-- src/func/chroot_clean | 3 +-- src/func/chroot_initial | 3 +-- src/func/chroot_is_mounted | 3 +-- src/func/chroot_sh | 3 +-- src/func/chroot_umount | 3 +-- src/func/error_code | 3 +-- src/func/filesystem_extract | 3 +-- src/func/filesystem_get_type | 3 +-- src/func/filesystem_pack | 3 +-- src/func/iso_create | 3 +-- src/func/iso_extract | 3 +-- src/func/on_exit | 3 +-- src/func/workspace_erase | 3 +-- src/proj/debian | 3 +-- src/proj/desinfect.17 | 5 ++--- src/proj/ubuntu | 5 ++--- src/proj/ubuntu.16.04 | 5 ++--- 19 files changed, 22 insertions(+), 41 deletions(-) diff --git a/src/func/check_dependency b/src/func/check_dependency index 06b1c4f..415ce16 100644 --- a/src/func/check_dependency +++ b/src/func/check_dependency @@ -1,7 +1,6 @@ #!/bin/bash #remaster lib -[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } +[ -d ""] || { echo "LIBDIR not exist"; exit 1; } #check_dependency # -> 0 | -> 16 diff --git a/src/func/check_user b/src/func/check_user index 7810111..534335a 100644 --- a/src/func/check_user +++ b/src/func/check_user @@ -1,7 +1,6 @@ #!/bin/bash #remaster lib -[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } +[ -d ""] || { echo "LIBDIR not exist"; exit 1; } #check_user function check_user() { diff --git a/src/func/chroot_clean b/src/func/chroot_clean index 485b8e0..e174124 100644 --- a/src/func/chroot_clean +++ b/src/func/chroot_clean @@ -1,7 +1,6 @@ #!/bin/bash #remaster lib -[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } +[ -d ""] || { echo "LIBDIR not exist"; exit 1; } #chroot_clean [chroot_dir] function chroot_clean() { diff --git a/src/func/chroot_initial b/src/func/chroot_initial index d4f9564..12eb26e 100644 --- a/src/func/chroot_initial +++ b/src/func/chroot_initial @@ -1,7 +1,6 @@ #!/bin/bash #remaster lib -[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } +[ -d ""] || { echo "LIBDIR not exist"; exit 1; } #chroot_initial [chroot_dir] function chroot_initial() { diff --git a/src/func/chroot_is_mounted b/src/func/chroot_is_mounted index f5facc3..f403cc9 100644 --- a/src/func/chroot_is_mounted +++ b/src/func/chroot_is_mounted @@ -1,7 +1,6 @@ #!/bin/bash #remaster lib -[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } +[ -d ""] || { echo "LIBDIR not exist"; exit 1; } #chroot_is_mounted [chroot_dir] #(Boolean)-> true | false diff --git a/src/func/chroot_sh b/src/func/chroot_sh index b475716..c0ac17a 100644 --- a/src/func/chroot_sh +++ b/src/func/chroot_sh @@ -1,7 +1,6 @@ #!/bin/bash #remaster lib -[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } +[ -d ""] || { echo "LIBDIR not exist"; exit 1; } #chroot_sh [chroot_dir] [command] function chroot_sh() { diff --git a/src/func/chroot_umount b/src/func/chroot_umount index 1bfd582..c1614b7 100644 --- a/src/func/chroot_umount +++ b/src/func/chroot_umount @@ -1,7 +1,6 @@ #!/bin/bash #remaster lib -[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } +[ -d ""] || { echo "LIBDIR not exist"; exit 1; } #chroot_umount [chroot_dir] function chroot_umount() { diff --git a/src/func/error_code b/src/func/error_code index 57a4a15..3154323 100644 --- a/src/func/error_code +++ b/src/func/error_code @@ -1,7 +1,6 @@ #!/bin/bash #remaster lib -[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } +[ -d ""] || { echo "LIBDIR not exist"; exit 1; } #error_code [error_level] function error_code() { diff --git a/src/func/filesystem_extract b/src/func/filesystem_extract index ed448d8..c7e0855 100644 --- a/src/func/filesystem_extract +++ b/src/func/filesystem_extract @@ -1,7 +1,6 @@ #!/bin/bash #remaster lib -[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } +[ -d ""] || { echo "LIBDIR not exist"; exit 1; } #filesystem_extract [filesystem_img_source] [chroot_path] function filesystem_extract() { diff --git a/src/func/filesystem_get_type b/src/func/filesystem_get_type index 1bffba9..9056936 100644 --- a/src/func/filesystem_get_type +++ b/src/func/filesystem_get_type @@ -1,7 +1,6 @@ #!/bin/bash #remaster lib -[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } +[ -d ""] || { echo "LIBDIR not exist"; exit 1; } #filesystem_get_type [dir] #(String)-> ext4, ext2, btfs, fuse, ... diff --git a/src/func/filesystem_pack b/src/func/filesystem_pack index a542012..3cc9a7a 100644 --- a/src/func/filesystem_pack +++ b/src/func/filesystem_pack @@ -1,7 +1,6 @@ #!/bin/bash #remaster lib -[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } +[ -d ""] || { echo "LIBDIR not exist"; exit 1; } #filesystem_pack [chroot_path] [filesystem_img_destination] function filesystem_pack() { diff --git a/src/func/iso_create b/src/func/iso_create index d6087f4..dc19bf0 100644 --- a/src/func/iso_create +++ b/src/func/iso_create @@ -1,7 +1,6 @@ #!/bin/bash #remaster lib -[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } +[ -d ""] || { echo "LIBDIR not exist"; exit 1; } #iso_create [chroot_path] [iso_extr_dir] [iso_destination] [iso_lable] function iso_create() { diff --git a/src/func/iso_extract b/src/func/iso_extract index 122ad6d..dd9f00f 100644 --- a/src/func/iso_extract +++ b/src/func/iso_extract @@ -1,7 +1,6 @@ #!/bin/bash #remaster lib -[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } +[ -d ""] || { echo "LIBDIR not exist"; exit 1; } #iso_extract [iso_source] [iso_extr_dir] function iso_extract() { diff --git a/src/func/on_exit b/src/func/on_exit index 40b6f34..1bc4e23 100644 --- a/src/func/on_exit +++ b/src/func/on_exit @@ -1,7 +1,6 @@ #!/bin/bash #remaster lib -[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } +[ -d ""] || { echo "LIBDIR not exist"; exit 1; } #on_exit [error_level] function on_exit() { diff --git a/src/func/workspace_erase b/src/func/workspace_erase index 2ecb36e..fb3842a 100644 --- a/src/func/workspace_erase +++ b/src/func/workspace_erase @@ -1,7 +1,6 @@ #!/bin/bash #remaster lib -[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } +[ -d ""] || { echo "LIBDIR not exist"; exit 1; } #workspace_erase [workspace_path] function workspace_erase() { diff --git a/src/proj/debian b/src/proj/debian index d19c8e8..a565d23 100644 --- a/src/proj/debian +++ b/src/proj/debian @@ -1,7 +1,6 @@ #!/bin/bash #remaster lib -[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } +[ -d ""] || { echo "LIBDIR not exist"; exit 1; } #################################### ##### Base Template D E B I A N #### #################################### diff --git a/src/proj/desinfect.17 b/src/proj/desinfect.17 index e3c35f4..64a4454 100644 --- a/src/proj/desinfect.17 +++ b/src/proj/desinfect.17 @@ -1,10 +1,9 @@ #!/bin/bash #remaster lib -[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } +[ -d ""] || { echo "LIBDIR not exist"; exit 1; } #desinfect.17 # . -Y ubuntu.16.04 -> ubuntu -> debian -source $LIBDIR/proj/ubuntu.16.04 +source /proj/ubuntu.16.04 TEST2="na" diff --git a/src/proj/ubuntu b/src/proj/ubuntu index 02653d2..ce9c72c 100644 --- a/src/proj/ubuntu +++ b/src/proj/ubuntu @@ -1,12 +1,11 @@ #!/bin/bash #remaster lib -[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } +[ -d ""] || { echo "LIBDIR not exist"; exit 1; } #################################### ##### Base Template U B U N T U #### #################################### # . -> debian -source $LIBDIR/proj/debian +source /proj/debian TEST2="jaUb" diff --git a/src/proj/ubuntu.16.04 b/src/proj/ubuntu.16.04 index 5619a3f..43135c9 100644 --- a/src/proj/ubuntu.16.04 +++ b/src/proj/ubuntu.16.04 @@ -1,10 +1,9 @@ #!/bin/bash #remaster lib -[ -d "$LIBDIR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDIR"] || { echo "LIBDIR not exist"; exit 1; } +[ -d ""] || { echo "LIBDIR not exist"; exit 1; } #ubuntu.16.04 # . -> ubuntu -> debian -source $LIBDIR/proj/ubuntu +source /proj/ubuntu TEST2="jaUBU" From c6103a8fb44ff8669046d46630b5482675cee99c Mon Sep 17 00:00:00 2001 From: 6543 Date: Mon, 7 May 2018 01:58:55 +0200 Subject: [PATCH 17/38] source cant use variables (p5-final) --- autogen.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/autogen.sh b/autogen.sh index 39f649f..3026a54 100755 --- a/autogen.sh +++ b/autogen.sh @@ -30,15 +30,15 @@ function build() { #config ... function set_rootdir() { - sed -i "s//$1/g" build/usr/bin/remaster + sed -i "s##$1#g" build/usr/bin/remaster for i in proj func mods; do - sed -i "s//$1/g" build/usr/lib/remaster/$i/* + sed -i "s##$1#g" build/usr/lib/remaster/$i/* done } function set_libdir() { - sed -i "s//$1/g" build/usr/bin/remaster + sed -i "s##$1#g" build/usr/bin/remaster for i in proj func mods; do - sed -i "s//$1/g" build/usr/lib/remaster/$i/* + sed -i "s##$1#g" build/usr/lib/remaster/$i/* done } From c4f2f7367a9e6a3e608f4de659a53c5db1f8a58f Mon Sep 17 00:00:00 2001 From: 6543 Date: Mon, 7 May 2018 02:08:20 +0200 Subject: [PATCH 18/38] docu ... --- doc/lib-header.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/doc/lib-header.txt b/doc/lib-header.txt index 02f097a..a9ba186 100644 --- a/doc/lib-header.txt +++ b/doc/lib-header.txt @@ -1,6 +1,5 @@ #!/bin/bash #remaster lib -[ -d "$LIBDR"] || export LIBDIR="/usr/lib/remaster/" -[ -d "$LIBDR"] || { echo "LIBDR not exist"; exit 1; } +[ -d ""] || { echo "LIBDIR not exist"; exit 1; } #beginn func From 41946e6584a8cdca815a7636dc3ac11ab6871955 Mon Sep 17 00:00:00 2001 From: 6543 Date: Mon, 7 May 2018 02:34:25 +0200 Subject: [PATCH 19/38] docu ... --- README.md | 42 ++++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 625d883..0931ce3 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,29 @@ # remaster -in restructure at the moment ... -# Description -The aim of this Project is to create a deamon for a server, -wich update live systems. -You should only have to install the modules for different OS/Live-Projects. -It also set the right network settings (Proxy, DNS, ...) -and will be extendible wit PXE menue. -additional: Web Interface (Create/Change/Deltete Jobs; Download Latest Isos; Start/Stop PXE Server) +## Description -# ToDo - * general struktur - * split into mudules - * more OS - * make it mor felexible - * ... (look at issues) +The aim of this Project is to create a deamon for a server, wich update live systems. You should only have to install the modules for different OS/Live-Projects. It also set the right network settings (Proxy, DNS, ...) and will be extendible wit PXE menue. additional: Web Interface (Create/Change/Deltete Jobs; Download Latest Isos; Start/Stop PXE Server) -# At the Moment - * Ubuntu/Debian - * Desinfect17 - * no config file (all setings in skript header) +## Dependencys + +- squashfs-tools +- xorriso +- wget +- sed +- sendemail + +## ToDo + +- more OS + + - Debian + - Ubuntu + - Desinfect17 + - CentOS + +## At the Moment + +- Ubuntu/Debian +- Desinfect17 +- one config file From bfdad6d5471927ef097be54f4b1c90dfe2160bb1 Mon Sep 17 00:00:00 2001 From: 6543 Date: Mon, 7 May 2018 02:42:10 +0200 Subject: [PATCH 20/38] Update License --- LICENSE | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/LICENSE b/LICENSE index 9cecc1d..9a4eebc 100644 --- a/LICENSE +++ b/LICENSE @@ -632,7 +632,7 @@ state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. {one line to give the program's name and a brief idea of what it does.} - Copyright (C) {year} {name of author} + Copyright (C) 2018 6543@obermui.de This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -652,7 +652,7 @@ Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: - {project} Copyright (C) {year} {fullname} + remaster Copyright (C) 2018 6543@obermui.de This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. From 1d392d7460145454582caa24dd4bb931e641d78c Mon Sep 17 00:00:00 2001 From: 6543 Date: Mon, 7 May 2018 02:43:27 +0200 Subject: [PATCH 21/38] docu... --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0931ce3..c19e499 100644 --- a/README.md +++ b/README.md @@ -15,13 +15,15 @@ The aim of this Project is to create a deamon for a server, wich update live sys ## ToDo -- more OS +- Support more Projects - Debian - Ubuntu - Desinfect17 - CentOS +- Add Job-Scheduler + ## At the Moment - Ubuntu/Debian From 26d09506651a50d7ef712d0412e9a6546ee34189 Mon Sep 17 00:00:00 2001 From: 6543 Date: Mon, 7 May 2018 02:56:46 +0200 Subject: [PATCH 22/38] code format bug --- src/func/check_dependency | 2 +- src/func/check_user | 2 +- src/func/chroot_clean | 2 +- src/func/chroot_initial | 2 +- src/func/chroot_is_mounted | 2 +- src/func/chroot_sh | 2 +- src/func/chroot_umount | 2 +- src/func/error_code | 2 +- src/func/filesystem_extract | 2 +- src/func/filesystem_get_type | 2 +- src/func/filesystem_pack | 2 +- src/func/iso_create | 2 +- src/func/iso_extract | 2 +- src/func/on_exit | 2 +- src/func/workspace_erase | 2 +- src/proj/debian | 3 ++- src/proj/desinfect.17 | 2 +- src/proj/ubuntu | 2 +- src/proj/ubuntu.16.04 | 2 +- 19 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src/func/check_dependency b/src/func/check_dependency index 415ce16..1a60c3f 100644 --- a/src/func/check_dependency +++ b/src/func/check_dependency @@ -1,6 +1,6 @@ #!/bin/bash #remaster lib -[ -d ""] || { echo "LIBDIR not exist"; exit 1; } +[ -d "" ] || { echo "LIBDIR not exist"; exit 1; } #check_dependency # -> 0 | -> 16 diff --git a/src/func/check_user b/src/func/check_user index 534335a..7980462 100644 --- a/src/func/check_user +++ b/src/func/check_user @@ -1,6 +1,6 @@ #!/bin/bash #remaster lib -[ -d ""] || { echo "LIBDIR not exist"; exit 1; } +[ -d "" ] || { echo "LIBDIR not exist"; exit 1; } #check_user function check_user() { diff --git a/src/func/chroot_clean b/src/func/chroot_clean index e174124..5817ec1 100644 --- a/src/func/chroot_clean +++ b/src/func/chroot_clean @@ -1,6 +1,6 @@ #!/bin/bash #remaster lib -[ -d ""] || { echo "LIBDIR not exist"; exit 1; } +[ -d "" ] || { echo "LIBDIR not exist"; exit 1; } #chroot_clean [chroot_dir] function chroot_clean() { diff --git a/src/func/chroot_initial b/src/func/chroot_initial index 12eb26e..c9abc3a 100644 --- a/src/func/chroot_initial +++ b/src/func/chroot_initial @@ -1,6 +1,6 @@ #!/bin/bash #remaster lib -[ -d ""] || { echo "LIBDIR not exist"; exit 1; } +[ -d "" ] || { echo "LIBDIR not exist"; exit 1; } #chroot_initial [chroot_dir] function chroot_initial() { diff --git a/src/func/chroot_is_mounted b/src/func/chroot_is_mounted index f403cc9..816a1d3 100644 --- a/src/func/chroot_is_mounted +++ b/src/func/chroot_is_mounted @@ -1,6 +1,6 @@ #!/bin/bash #remaster lib -[ -d ""] || { echo "LIBDIR not exist"; exit 1; } +[ -d "" ] || { echo "LIBDIR not exist"; exit 1; } #chroot_is_mounted [chroot_dir] #(Boolean)-> true | false diff --git a/src/func/chroot_sh b/src/func/chroot_sh index c0ac17a..0195203 100644 --- a/src/func/chroot_sh +++ b/src/func/chroot_sh @@ -1,6 +1,6 @@ #!/bin/bash #remaster lib -[ -d ""] || { echo "LIBDIR not exist"; exit 1; } +[ -d "" ] || { echo "LIBDIR not exist"; exit 1; } #chroot_sh [chroot_dir] [command] function chroot_sh() { diff --git a/src/func/chroot_umount b/src/func/chroot_umount index c1614b7..d0d902e 100644 --- a/src/func/chroot_umount +++ b/src/func/chroot_umount @@ -1,6 +1,6 @@ #!/bin/bash #remaster lib -[ -d ""] || { echo "LIBDIR not exist"; exit 1; } +[ -d "" ] || { echo "LIBDIR not exist"; exit 1; } #chroot_umount [chroot_dir] function chroot_umount() { diff --git a/src/func/error_code b/src/func/error_code index 3154323..f3c5582 100644 --- a/src/func/error_code +++ b/src/func/error_code @@ -1,6 +1,6 @@ #!/bin/bash #remaster lib -[ -d ""] || { echo "LIBDIR not exist"; exit 1; } +[ -d "" ] || { echo "LIBDIR not exist"; exit 1; } #error_code [error_level] function error_code() { diff --git a/src/func/filesystem_extract b/src/func/filesystem_extract index c7e0855..961dd07 100644 --- a/src/func/filesystem_extract +++ b/src/func/filesystem_extract @@ -1,6 +1,6 @@ #!/bin/bash #remaster lib -[ -d ""] || { echo "LIBDIR not exist"; exit 1; } +[ -d "" ] || { echo "LIBDIR not exist"; exit 1; } #filesystem_extract [filesystem_img_source] [chroot_path] function filesystem_extract() { diff --git a/src/func/filesystem_get_type b/src/func/filesystem_get_type index 9056936..e23c130 100644 --- a/src/func/filesystem_get_type +++ b/src/func/filesystem_get_type @@ -1,6 +1,6 @@ #!/bin/bash #remaster lib -[ -d ""] || { echo "LIBDIR not exist"; exit 1; } +[ -d "" ] || { echo "LIBDIR not exist"; exit 1; } #filesystem_get_type [dir] #(String)-> ext4, ext2, btfs, fuse, ... diff --git a/src/func/filesystem_pack b/src/func/filesystem_pack index 3cc9a7a..6e3b09a 100644 --- a/src/func/filesystem_pack +++ b/src/func/filesystem_pack @@ -1,6 +1,6 @@ #!/bin/bash #remaster lib -[ -d ""] || { echo "LIBDIR not exist"; exit 1; } +[ -d "" ] || { echo "LIBDIR not exist"; exit 1; } #filesystem_pack [chroot_path] [filesystem_img_destination] function filesystem_pack() { diff --git a/src/func/iso_create b/src/func/iso_create index dc19bf0..b3f6871 100644 --- a/src/func/iso_create +++ b/src/func/iso_create @@ -1,6 +1,6 @@ #!/bin/bash #remaster lib -[ -d ""] || { echo "LIBDIR not exist"; exit 1; } +[ -d "" ] || { echo "LIBDIR not exist"; exit 1; } #iso_create [chroot_path] [iso_extr_dir] [iso_destination] [iso_lable] function iso_create() { diff --git a/src/func/iso_extract b/src/func/iso_extract index dd9f00f..c69de53 100644 --- a/src/func/iso_extract +++ b/src/func/iso_extract @@ -1,6 +1,6 @@ #!/bin/bash #remaster lib -[ -d ""] || { echo "LIBDIR not exist"; exit 1; } +[ -d "" ] || { echo "LIBDIR not exist"; exit 1; } #iso_extract [iso_source] [iso_extr_dir] function iso_extract() { diff --git a/src/func/on_exit b/src/func/on_exit index 1bc4e23..0015d55 100644 --- a/src/func/on_exit +++ b/src/func/on_exit @@ -1,6 +1,6 @@ #!/bin/bash #remaster lib -[ -d ""] || { echo "LIBDIR not exist"; exit 1; } +[ -d "" ] || { echo "LIBDIR not exist"; exit 1; } #on_exit [error_level] function on_exit() { diff --git a/src/func/workspace_erase b/src/func/workspace_erase index fb3842a..1728d7b 100644 --- a/src/func/workspace_erase +++ b/src/func/workspace_erase @@ -1,6 +1,6 @@ #!/bin/bash #remaster lib -[ -d ""] || { echo "LIBDIR not exist"; exit 1; } +[ -d "" ] || { echo "LIBDIR not exist"; exit 1; } #workspace_erase [workspace_path] function workspace_erase() { diff --git a/src/proj/debian b/src/proj/debian index a565d23..2104637 100644 --- a/src/proj/debian +++ b/src/proj/debian @@ -1,6 +1,7 @@ #!/bin/bash #remaster lib -[ -d ""] || { echo "LIBDIR not exist"; exit 1; } +[ -d "" ] || { echo "LIBDIR not exist"; exit 1; } + #################################### ##### Base Template D E B I A N #### #################################### diff --git a/src/proj/desinfect.17 b/src/proj/desinfect.17 index 64a4454..eedc2ce 100644 --- a/src/proj/desinfect.17 +++ b/src/proj/desinfect.17 @@ -1,6 +1,6 @@ #!/bin/bash #remaster lib -[ -d ""] || { echo "LIBDIR not exist"; exit 1; } +[ -d "" ] || { echo "LIBDIR not exist"; exit 1; } #desinfect.17 # . -Y ubuntu.16.04 -> ubuntu -> debian diff --git a/src/proj/ubuntu b/src/proj/ubuntu index ce9c72c..4a6aaab 100644 --- a/src/proj/ubuntu +++ b/src/proj/ubuntu @@ -1,6 +1,6 @@ #!/bin/bash #remaster lib -[ -d ""] || { echo "LIBDIR not exist"; exit 1; } +[ -d "" ] || { echo "LIBDIR not exist"; exit 1; } #################################### ##### Base Template U B U N T U #### diff --git a/src/proj/ubuntu.16.04 b/src/proj/ubuntu.16.04 index 43135c9..af9770e 100644 --- a/src/proj/ubuntu.16.04 +++ b/src/proj/ubuntu.16.04 @@ -1,6 +1,6 @@ #!/bin/bash #remaster lib -[ -d ""] || { echo "LIBDIR not exist"; exit 1; } +[ -d "" ] || { echo "LIBDIR not exist"; exit 1; } #ubuntu.16.04 # . -> ubuntu -> debian From 41e020e645f035379e399b3c70e7c40f0398506c Mon Sep 17 00:00:00 2001 From: 6543 Date: Mon, 7 May 2018 03:01:16 +0200 Subject: [PATCH 23/38] del test vars --- src/proj/debian | 3 --- src/proj/ubuntu | 2 -- src/proj/ubuntu.16.04 | 2 -- 3 files changed, 7 deletions(-) diff --git a/src/proj/debian b/src/proj/debian index 2104637..db0aaa4 100644 --- a/src/proj/debian +++ b/src/proj/debian @@ -35,6 +35,3 @@ function os_update() { echo "done" } - -TEST="ja" -TEST2="ja" diff --git a/src/proj/ubuntu b/src/proj/ubuntu index 4a6aaab..cd36ae9 100644 --- a/src/proj/ubuntu +++ b/src/proj/ubuntu @@ -7,5 +7,3 @@ #################################### # . -> debian source /proj/debian - -TEST2="jaUb" diff --git a/src/proj/ubuntu.16.04 b/src/proj/ubuntu.16.04 index af9770e..427a76a 100644 --- a/src/proj/ubuntu.16.04 +++ b/src/proj/ubuntu.16.04 @@ -5,5 +5,3 @@ #ubuntu.16.04 # . -> ubuntu -> debian source /proj/ubuntu - -TEST2="jaUBU" From 07e4e0d663776069abe6267f8c22ac527c595e25 Mon Sep 17 00:00:00 2001 From: 6543 Date: Tue, 8 May 2018 00:28:32 +0200 Subject: [PATCH 24/38] lib header --- doc/lib-header.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lib-header.txt b/doc/lib-header.txt index a9ba186..5d8cf28 100644 --- a/doc/lib-header.txt +++ b/doc/lib-header.txt @@ -1,5 +1,5 @@ #!/bin/bash #remaster lib -[ -d ""] || { echo "LIBDIR not exist"; exit 1; } +[ -d "" ] || { echo "LIBDIR not exist"; exit 1; } #beginn func From 49901e1f325421a3c7872487730c07629db3d9d3 Mon Sep 17 00:00:00 2001 From: 6543 Date: Thu, 10 May 2018 14:19:14 +0200 Subject: [PATCH 25/38] scripts --- script/set_version.sh | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100755 script/set_version.sh diff --git a/script/set_version.sh b/script/set_version.sh new file mode 100755 index 0000000..4492c07 --- /dev/null +++ b/script/set_version.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +[ -f "src/remaster.sh" ] && { + + v=`echo $1 | sed 's/\./\\./g'` + + #nummer + sed -i "s/@version\ .\..\../@version\ $v/g" src/remaster.sh + + #datum + sed -i "s/@date\ ....-..-../@date\ `date +%Y-%m-%d`/g" src/remaster.sh +} From 98e0b6c835d5fbcf413f1099715cb56c9ae6d7a1 Mon Sep 17 00:00:00 2001 From: 6543 Date: Thu, 10 May 2018 17:13:19 +0200 Subject: [PATCH 26/38] exec singel func --- src/func/check_dependency | 5 +++++ src/func/check_user | 5 +++++ src/func/chroot_clean | 5 +++++ src/func/chroot_initial | 5 +++++ src/func/chroot_is_mounted | 5 +++++ src/func/chroot_sh | 5 +++++ src/func/chroot_umount | 5 +++++ src/func/error_code | 5 +++++ src/func/filesystem_extract | 5 +++++ src/func/filesystem_get_type | 5 +++++ src/func/filesystem_pack | 5 +++++ src/func/iso_create | 5 +++++ src/func/iso_extract | 5 +++++ src/func/on_exit | 5 +++++ src/func/workspace_erase | 5 +++++ src/mods/xrdp | 16 ++++++++++++++++ src/proj/debian | 5 +++++ src/proj/desinfect.17 | 5 +++++ src/proj/ubuntu | 5 +++++ src/proj/ubuntu.16.04 | 5 +++++ src/remaster.sh | 4 ++-- 21 files changed, 113 insertions(+), 2 deletions(-) mode change 100644 => 100755 src/func/check_dependency mode change 100644 => 100755 src/func/check_user mode change 100644 => 100755 src/func/chroot_clean mode change 100644 => 100755 src/func/chroot_initial mode change 100644 => 100755 src/func/chroot_is_mounted mode change 100644 => 100755 src/func/chroot_sh mode change 100644 => 100755 src/func/chroot_umount mode change 100644 => 100755 src/func/error_code mode change 100644 => 100755 src/func/filesystem_extract mode change 100644 => 100755 src/func/filesystem_get_type mode change 100644 => 100755 src/func/filesystem_pack mode change 100644 => 100755 src/func/iso_create mode change 100644 => 100755 src/func/iso_extract mode change 100644 => 100755 src/func/on_exit mode change 100644 => 100755 src/func/workspace_erase mode change 100644 => 100755 src/mods/xrdp mode change 100644 => 100755 src/proj/debian mode change 100644 => 100755 src/proj/desinfect.17 mode change 100644 => 100755 src/proj/ubuntu mode change 100644 => 100755 src/proj/ubuntu.16.04 diff --git a/src/func/check_dependency b/src/func/check_dependency old mode 100644 new mode 100755 index 1a60c3f..53e25a5 --- a/src/func/check_dependency +++ b/src/func/check_dependency @@ -13,3 +13,8 @@ function check_dependency() { done return 0 } + +[ -n "$1" ] && { + echo param + $1 +} diff --git a/src/func/check_user b/src/func/check_user old mode 100644 new mode 100755 index 7980462..e36cd40 --- a/src/func/check_user +++ b/src/func/check_user @@ -10,3 +10,8 @@ function check_user() { return 10 } } + +[ -n "$1" ] && { + echo param + $1 +} diff --git a/src/func/chroot_clean b/src/func/chroot_clean old mode 100644 new mode 100755 index 5817ec1..137d0ed --- a/src/func/chroot_clean +++ b/src/func/chroot_clean @@ -15,3 +15,8 @@ function chroot_clean() { echo "done" } + +[ -n "$1" ] && { + echo param + $1 +} diff --git a/src/func/chroot_initial b/src/func/chroot_initial old mode 100644 new mode 100755 index c9abc3a..7977b67 --- a/src/func/chroot_initial +++ b/src/func/chroot_initial @@ -24,3 +24,8 @@ function chroot_initial() { echo "done" } + +[ -n "$1" ] && { + echo param + $1 +} diff --git a/src/func/chroot_is_mounted b/src/func/chroot_is_mounted old mode 100644 new mode 100755 index 816a1d3..067cf31 --- a/src/func/chroot_is_mounted +++ b/src/func/chroot_is_mounted @@ -15,3 +15,8 @@ function chroot_is_mounted() { echo "false" fi } + +[ -n "$1" ] && { + echo param + $1 +} diff --git a/src/func/chroot_sh b/src/func/chroot_sh old mode 100644 new mode 100755 index 0195203..4013e62 --- a/src/func/chroot_sh +++ b/src/func/chroot_sh @@ -22,3 +22,8 @@ function chroot_sh() { chroot "$chroot_dir" /bin/bash --login -c ". /tmp/env.sh; $command" } + +[ -n "$1" ] && { + echo param + $1 +} diff --git a/src/func/chroot_umount b/src/func/chroot_umount old mode 100644 new mode 100755 index d0d902e..2790866 --- a/src/func/chroot_umount +++ b/src/func/chroot_umount @@ -24,3 +24,8 @@ function chroot_umount() { echo "done" } + +[ -n "$1" ] && { + echo param + $1 +} diff --git a/src/func/error_code b/src/func/error_code old mode 100644 new mode 100755 index f3c5582..b1c5668 --- a/src/func/error_code +++ b/src/func/error_code @@ -58,3 +58,8 @@ function error_code() { ;; esac } + +[ -n "$1" ] && { + echo param + $1 +} diff --git a/src/func/filesystem_extract b/src/func/filesystem_extract old mode 100644 new mode 100755 index 961dd07..a4f52c0 --- a/src/func/filesystem_extract +++ b/src/func/filesystem_extract @@ -41,3 +41,8 @@ function filesystem_extract() { echo "done" } + +[ -n "$1" ] && { + echo param + $1 +} diff --git a/src/func/filesystem_get_type b/src/func/filesystem_get_type old mode 100644 new mode 100755 index e23c130..fa0e22f --- a/src/func/filesystem_get_type +++ b/src/func/filesystem_get_type @@ -8,3 +8,8 @@ function filesystem_get_type() { fs_aTemp=(`df -T "$1"`) echo ${fs_aTemp[9]} } + +[ -n "$1" ] && { + echo param + $1 +} diff --git a/src/func/filesystem_pack b/src/func/filesystem_pack old mode 100644 new mode 100755 index 6e3b09a..c5a0a8d --- a/src/func/filesystem_pack +++ b/src/func/filesystem_pack @@ -30,3 +30,8 @@ function filesystem_pack() { echo "done" } + +[ -n "$1" ] && { + echo param + $1 +} diff --git a/src/func/iso_create b/src/func/iso_create old mode 100644 new mode 100755 index b3f6871..113d756 --- a/src/func/iso_create +++ b/src/func/iso_create @@ -24,3 +24,8 @@ function iso_create() { echo "done" } + +[ -n "$1" ] && { + echo param + $1 +} diff --git a/src/func/iso_extract b/src/func/iso_extract old mode 100644 new mode 100755 index c69de53..8912116 --- a/src/func/iso_extract +++ b/src/func/iso_extract @@ -45,3 +45,8 @@ function iso_extract() { echo "done" } + +[ -n "$1" ] && { + echo param + $1 +} diff --git a/src/func/on_exit b/src/func/on_exit old mode 100644 new mode 100755 index 0015d55..cbf1c9f --- a/src/func/on_exit +++ b/src/func/on_exit @@ -27,3 +27,8 @@ function on_exit() { } exit $1 } + +[ -n "$1" ] && { + echo param + $1 +} diff --git a/src/func/workspace_erase b/src/func/workspace_erase old mode 100644 new mode 100755 index 1728d7b..7c26469 --- a/src/func/workspace_erase +++ b/src/func/workspace_erase @@ -12,3 +12,8 @@ function workspace_erase() { echo "done" } + +[ -n "$1" ] && { + echo param + $1 +} diff --git a/src/mods/xrdp b/src/mods/xrdp old mode 100644 new mode 100755 index e69de29..6c47b6e --- a/src/mods/xrdp +++ b/src/mods/xrdp @@ -0,0 +1,16 @@ +#!/bin/bash +#remaster lib +[ -d "" ] || { echo "LIBDIR not exist"; exit 1; } + + + +## ... + + + + + +[ -n "$1" ] && { + echo param + $1 +} diff --git a/src/proj/debian b/src/proj/debian old mode 100644 new mode 100755 index db0aaa4..25f461e --- a/src/proj/debian +++ b/src/proj/debian @@ -35,3 +35,8 @@ function os_update() { echo "done" } + +[ -n "$1" ] && { + echo param + $1 +} diff --git a/src/proj/desinfect.17 b/src/proj/desinfect.17 old mode 100644 new mode 100755 index eedc2ce..48140f3 --- a/src/proj/desinfect.17 +++ b/src/proj/desinfect.17 @@ -7,3 +7,8 @@ source /proj/ubuntu.16.04 TEST2="na" + +[ -n "$1" ] && { + echo param + $1 +} diff --git a/src/proj/ubuntu b/src/proj/ubuntu old mode 100644 new mode 100755 index cd36ae9..180485c --- a/src/proj/ubuntu +++ b/src/proj/ubuntu @@ -7,3 +7,8 @@ #################################### # . -> debian source /proj/debian + +[ -n "$1" ] && { + echo param + $1 +} diff --git a/src/proj/ubuntu.16.04 b/src/proj/ubuntu.16.04 old mode 100644 new mode 100755 index 427a76a..cc7275a --- a/src/proj/ubuntu.16.04 +++ b/src/proj/ubuntu.16.04 @@ -5,3 +5,8 @@ #ubuntu.16.04 # . -> ubuntu -> debian source /proj/ubuntu + +[ -n "$1" ] && { + echo param + $1 +} diff --git a/src/remaster.sh b/src/remaster.sh index f4b85e3..72938f0 100755 --- a/src/remaster.sh +++ b/src/remaster.sh @@ -1,7 +1,7 @@ #!/bin/bash -#@version 1.9.1 +#@version 1.9.2 #@autor 6543@obermui.de -#@date 2018-04-26 +#@date 2018-05-10 #@licence GNUv3 ##################################################################################### From 81d0a5c8c3419601d773c7dbdac75d41e81c1da5 Mon Sep 17 00:00:00 2001 From: 6543 Date: Thu, 10 May 2018 17:13:52 +0200 Subject: [PATCH 27/38] add Doc "Server Bedienung" --- doc/Server Bedienung.odt | Bin 0 -> 16515 bytes doc/Server Bedienung.pdf | Bin 0 -> 56758 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/Server Bedienung.odt create mode 100644 doc/Server Bedienung.pdf diff --git a/doc/Server Bedienung.odt b/doc/Server Bedienung.odt new file mode 100644 index 0000000000000000000000000000000000000000..2fc0b1374aab9303f3867757555dacf3b7a51900 GIT binary patch literal 16515 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 U&+Avn7z$9y`^?qD{p;KR15j-4-~a#s literal 0 HcmV?d00001 diff --git a/doc/Server Bedienung.pdf b/doc/Server Bedienung.pdf new file mode 100644 index 0000000000000000000000000000000000000000..cb15abf620cd621b1110dcfdf34c649f6365011d GIT binary patch literal 56758 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 MR16K7PArxG1)f)vOaK4? literal 0 HcmV?d00001 From c5c5327826e52254650f2839cbca0ae3a9a67fb1 Mon Sep 17 00:00:00 2001 From: 6543 Date: Thu, 10 May 2018 18:36:34 +0200 Subject: [PATCH 28/38] spelling --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c19e499..780fda9 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,9 @@ ## Description -The aim of this Project is to create a deamon for a server, wich update live systems. You should only have to install the modules for different OS/Live-Projects. It also set the right network settings (Proxy, DNS, ...) and will be extendible wit PXE menue. additional: Web Interface (Create/Change/Deltete Jobs; Download Latest Isos; Start/Stop PXE Server) +The aim of this Project is to create a daemon for a server, witch update live systems. You should only have to install the modules for different OS/Live-Projects. It also set the right network settings (Proxy, DNS, ...) and will be extendible wit PXE menu. additional: Web Interface (Create/Change/Delete Jobs; Download Latest ISO; Start/Stop PXE Server) -## Dependencys +## Dependency’s - squashfs-tools - xorriso @@ -13,7 +13,7 @@ The aim of this Project is to create a deamon for a server, wich update live sys - sed - sendemail -## ToDo +## To Do - Support more Projects From a5345457d4a450b797080cf83602564bbddac906 Mon Sep 17 00:00:00 2001 From: 6543 Date: Thu, 10 May 2018 18:51:34 +0200 Subject: [PATCH 29/38] docu --- changes/remaster.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/changes/remaster.md b/changes/remaster.md index 7774b43..f03f3ef 100644 --- a/changes/remaster.md +++ b/changes/remaster.md @@ -1,2 +1,5 @@ 2018-04-26 - 1.9.1 * seperate script and config + +2018-04-26 - 1.9.2 + * exec singel func From c43fb3b72482053ea1d071eb920e628e8b0d44db Mon Sep 17 00:00:00 2001 From: 6543 Date: Thu, 10 May 2018 22:47:24 +0200 Subject: [PATCH 30/38] hotfix-1.9.3 --- changes/remaster.md | 5 ++++- script/set_version.sh | 18 ++++++++++++++---- src/remaster.sh | 8 ++++---- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/changes/remaster.md b/changes/remaster.md index f03f3ef..0834916 100644 --- a/changes/remaster.md +++ b/changes/remaster.md @@ -1,5 +1,8 @@ 2018-04-26 - 1.9.1 * seperate script and config -2018-04-26 - 1.9.2 +2018-05-10 - 1.9.2 * exec singel func + +2018-05-10 - 1.9.3 + * hotfix-1.9.3 diff --git a/script/set_version.sh b/script/set_version.sh index 4492c07..e9860c7 100755 --- a/script/set_version.sh +++ b/script/set_version.sh @@ -1,12 +1,22 @@ #!/bin/bash -[ -f "src/remaster.sh" ] && { +version=$1 +date=`date +%Y-%m-%d` - v=`echo $1 | sed 's/\./\\./g'` +[ -e "src/remaster.sh" ] && { + + version_sed=`echo $version | sed 's/\./\\./g'` #nummer - sed -i "s/@version\ .\..\../@version\ $v/g" src/remaster.sh + sed -i "s/@version\ .\..\../@version\ $version_sed/g" src/remaster.sh #datum - sed -i "s/@date\ ....-..-../@date\ `date +%Y-%m-%d`/g" src/remaster.sh + sed -i "s/@date\ ....-..-../@date\ $date/g" src/remaster.sh +} + +[ -e "changes/remaster.md" ] && { + + echo >> changes/remaster.md + echo $date - $version >> changes/remaster.md + echo pleace update changes/remaster.md } diff --git a/src/remaster.sh b/src/remaster.sh index 72938f0..b09c644 100755 --- a/src/remaster.sh +++ b/src/remaster.sh @@ -1,5 +1,5 @@ #!/bin/bash -#@version 1.9.2 +#@version 1.9.3 #@autor 6543@obermui.de #@date 2018-05-10 #@licence GNUv3 @@ -15,10 +15,10 @@ } #read main setting -if [ -f "/etc/remaster/config.cfg"]; then +if [ -f "/etc/remaster/config.cfg" ]; then source "/etc/remaster/config.cfg" else - if [ -f "/etc/remaster/config.sample.cfg"]; then + if [ -f "/etc/remaster/config.sample.cfg" ]; then source "/etc/remaster/config.sample.cfg" else echo "ERROR config not found" @@ -853,7 +853,7 @@ function proxy_enable_desinfect2017() { #Sophos if [ -f ""$chroot_dir/opt/sophos-av/etc/savd.cfg"" ]; then echo "Sophos: Found" - echo "sophos:
http://www-proxy.bybn.de:80
" >> "$chroot_dir/opt/sophos-av/etc/savd.cfg" + echo "sophos:
http://$proxy_host:$proxy_port
" >> "$chroot_dir/opt/sophos-av/etc/savd.cfg" else eco "Sophos: NOT Found" fi From 2513b645c1eb8c87cbfe900ca5de568affee8d13 Mon Sep 17 00:00:00 2001 From: 6543 Date: Fri, 11 May 2018 00:04:02 +0200 Subject: [PATCH 31/38] standalone executable --- src/func/check_dependency | 4 ++-- src/func/check_user | 4 ++-- src/func/chroot_clean | 4 ++-- src/func/chroot_initial | 4 ++-- src/func/chroot_is_mounted | 4 ++-- src/func/chroot_sh | 4 ++-- src/func/chroot_umount | 4 ++-- src/func/error_code | 7 +++++-- src/func/filesystem_extract | 4 ++-- src/func/filesystem_get_type | 4 ++-- src/func/filesystem_pack | 4 ++-- src/func/iso_create | 4 ++-- src/func/iso_extract | 4 ++-- src/func/on_exit | 4 ++-- src/func/workspace_erase | 4 ++-- src/mods/xrdp | 4 ++-- src/proj/debian | 5 ----- src/proj/desinfect.17 | 5 ----- src/proj/ubuntu | 5 ----- src/proj/ubuntu.16.04 | 5 ----- 20 files changed, 35 insertions(+), 52 deletions(-) diff --git a/src/func/check_dependency b/src/func/check_dependency index 53e25a5..9776c5b 100755 --- a/src/func/check_dependency +++ b/src/func/check_dependency @@ -14,7 +14,7 @@ function check_dependency() { return 0 } +#this func is standalone executable [ -n "$1" ] && { - echo param - $1 + check_dependency $@ } diff --git a/src/func/check_user b/src/func/check_user index e36cd40..a312e2b 100755 --- a/src/func/check_user +++ b/src/func/check_user @@ -11,7 +11,7 @@ function check_user() { } } +#this func is standalone executable [ -n "$1" ] && { - echo param - $1 + check_user $@ } diff --git a/src/func/chroot_clean b/src/func/chroot_clean index 137d0ed..e266249 100755 --- a/src/func/chroot_clean +++ b/src/func/chroot_clean @@ -16,7 +16,7 @@ function chroot_clean() { echo "done" } +#this func is standalone executable [ -n "$1" ] && { - echo param - $1 + chroot_clean $@ } diff --git a/src/func/chroot_initial b/src/func/chroot_initial index 7977b67..c0086ba 100755 --- a/src/func/chroot_initial +++ b/src/func/chroot_initial @@ -25,7 +25,7 @@ function chroot_initial() { echo "done" } +#this func is standalone executable [ -n "$1" ] && { - echo param - $1 + chroot_initial $@ } diff --git a/src/func/chroot_is_mounted b/src/func/chroot_is_mounted index 067cf31..687b10b 100755 --- a/src/func/chroot_is_mounted +++ b/src/func/chroot_is_mounted @@ -16,7 +16,7 @@ function chroot_is_mounted() { fi } +#this func is standalone executable [ -n "$1" ] && { - echo param - $1 + chroot_is_mounted $@ } diff --git a/src/func/chroot_sh b/src/func/chroot_sh index 4013e62..5f1bed2 100755 --- a/src/func/chroot_sh +++ b/src/func/chroot_sh @@ -23,7 +23,7 @@ function chroot_sh() { chroot "$chroot_dir" /bin/bash --login -c ". /tmp/env.sh; $command" } +#this func is standalone executable [ -n "$1" ] && { - echo param - $1 + chroot_sh $@ } diff --git a/src/func/chroot_umount b/src/func/chroot_umount index 2790866..31df3ea 100755 --- a/src/func/chroot_umount +++ b/src/func/chroot_umount @@ -25,7 +25,7 @@ function chroot_umount() { echo "done" } +#this func is standalone executable [ -n "$1" ] && { - echo param - $1 + chroot_umount $@ } diff --git a/src/func/error_code b/src/func/error_code index b1c5668..49eaf3a 100755 --- a/src/func/error_code +++ b/src/func/error_code @@ -53,13 +53,16 @@ function error_code() { 22) echo "wrong filesystem" ;; + all) + error_code + ;; *) echo $'No Defined Error Code.\nPerhaps an Error ocure on a Command wich was started by this Skritp.' ;; esac } +#this func is standalone executable [ -n "$1" ] && { - echo param - $1 + error_code $@ } diff --git a/src/func/filesystem_extract b/src/func/filesystem_extract index a4f52c0..2ca5bdb 100755 --- a/src/func/filesystem_extract +++ b/src/func/filesystem_extract @@ -42,7 +42,7 @@ function filesystem_extract() { echo "done" } +#this func is standalone executable [ -n "$1" ] && { - echo param - $1 + filesystem_extract $@ } diff --git a/src/func/filesystem_get_type b/src/func/filesystem_get_type index fa0e22f..d005f0c 100755 --- a/src/func/filesystem_get_type +++ b/src/func/filesystem_get_type @@ -9,7 +9,7 @@ function filesystem_get_type() { echo ${fs_aTemp[9]} } +#this func is standalone executable [ -n "$1" ] && { - echo param - $1 + filesystem_get_type $@ } diff --git a/src/func/filesystem_pack b/src/func/filesystem_pack index c5a0a8d..6a89988 100755 --- a/src/func/filesystem_pack +++ b/src/func/filesystem_pack @@ -31,7 +31,7 @@ function filesystem_pack() { echo "done" } +#this func is standalone executable [ -n "$1" ] && { - echo param - $1 + filesystem_pack $@ } diff --git a/src/func/iso_create b/src/func/iso_create index 113d756..a575414 100755 --- a/src/func/iso_create +++ b/src/func/iso_create @@ -25,7 +25,7 @@ function iso_create() { echo "done" } +#this func is standalone executable [ -n "$1" ] && { - echo param - $1 + iso_create $@ } diff --git a/src/func/iso_extract b/src/func/iso_extract index 8912116..ab6c6df 100755 --- a/src/func/iso_extract +++ b/src/func/iso_extract @@ -46,7 +46,7 @@ function iso_extract() { echo "done" } +#this func is standalone executable [ -n "$1" ] && { - echo param - $1 + iso_extract $@ } diff --git a/src/func/on_exit b/src/func/on_exit index cbf1c9f..0801b75 100755 --- a/src/func/on_exit +++ b/src/func/on_exit @@ -28,7 +28,7 @@ function on_exit() { exit $1 } +#this func is standalone executable [ -n "$1" ] && { - echo param - $1 + on_exit $@ } diff --git a/src/func/workspace_erase b/src/func/workspace_erase index 7c26469..998390c 100755 --- a/src/func/workspace_erase +++ b/src/func/workspace_erase @@ -13,7 +13,7 @@ function workspace_erase() { echo "done" } +#this func is standalone executable [ -n "$1" ] && { - echo param - $1 + workspace_erase $@ } diff --git a/src/mods/xrdp b/src/mods/xrdp index 6c47b6e..209fffe 100755 --- a/src/mods/xrdp +++ b/src/mods/xrdp @@ -10,7 +10,7 @@ +#this func is standalone executable [ -n "$1" ] && { - echo param - $1 + xrdp $@ } diff --git a/src/proj/debian b/src/proj/debian index 25f461e..db0aaa4 100755 --- a/src/proj/debian +++ b/src/proj/debian @@ -35,8 +35,3 @@ function os_update() { echo "done" } - -[ -n "$1" ] && { - echo param - $1 -} diff --git a/src/proj/desinfect.17 b/src/proj/desinfect.17 index 48140f3..eedc2ce 100755 --- a/src/proj/desinfect.17 +++ b/src/proj/desinfect.17 @@ -7,8 +7,3 @@ source /proj/ubuntu.16.04 TEST2="na" - -[ -n "$1" ] && { - echo param - $1 -} diff --git a/src/proj/ubuntu b/src/proj/ubuntu index 180485c..cd36ae9 100755 --- a/src/proj/ubuntu +++ b/src/proj/ubuntu @@ -7,8 +7,3 @@ #################################### # . -> debian source /proj/debian - -[ -n "$1" ] && { - echo param - $1 -} diff --git a/src/proj/ubuntu.16.04 b/src/proj/ubuntu.16.04 index cc7275a..427a76a 100755 --- a/src/proj/ubuntu.16.04 +++ b/src/proj/ubuntu.16.04 @@ -5,8 +5,3 @@ #ubuntu.16.04 # . -> ubuntu -> debian source /proj/ubuntu - -[ -n "$1" ] && { - echo param - $1 -} From 80d2ad753d1142f39f45237470078ace16b3a09a Mon Sep 17 00:00:00 2001 From: 6543 Date: Sat, 12 May 2018 19:54:34 +0200 Subject: [PATCH 32/38] debian init --- .gitignore | 1 + DEBIAN/control | 12 ++++++++++++ DEBIAN/postinst | 1 + DEBIAN/postrm | 1 + DEBIAN/preinst | 1 + DEBIAN/prerm | 1 + autogen.sh | 34 +++++++++++++++++++++++++++++++++- script/set_version.sh | 4 ++++ 8 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 DEBIAN/control create mode 100755 DEBIAN/postinst create mode 100755 DEBIAN/postrm create mode 100755 DEBIAN/preinst create mode 100755 DEBIAN/prerm diff --git a/.gitignore b/.gitignore index 796b96d..67e07b8 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /build +/release diff --git a/DEBIAN/control b/DEBIAN/control new file mode 100644 index 0000000..7ae5be4 --- /dev/null +++ b/DEBIAN/control @@ -0,0 +1,12 @@ +Package: remaster +Source: remaster +Version: 1.9.3 +Architecture: all +Maintainer: 6543 <6543@obermui.de> +Installed-Size: +Depends: squashfs-tools, xorriso, wget, sed, sendemail, bash +Suggests: nfs-kernel-server, isc-dhcp-server +Section: utils +Priority: optional +Homepage: https://github.com/6543/remaster +Description: The aim of this Project is to create a daemon for a server, witch update live systems. diff --git a/DEBIAN/postinst b/DEBIAN/postinst new file mode 100755 index 0000000..1a24852 --- /dev/null +++ b/DEBIAN/postinst @@ -0,0 +1 @@ +#!/bin/sh diff --git a/DEBIAN/postrm b/DEBIAN/postrm new file mode 100755 index 0000000..1a24852 --- /dev/null +++ b/DEBIAN/postrm @@ -0,0 +1 @@ +#!/bin/sh diff --git a/DEBIAN/preinst b/DEBIAN/preinst new file mode 100755 index 0000000..1a24852 --- /dev/null +++ b/DEBIAN/preinst @@ -0,0 +1 @@ +#!/bin/sh diff --git a/DEBIAN/prerm b/DEBIAN/prerm new file mode 100755 index 0000000..1a24852 --- /dev/null +++ b/DEBIAN/prerm @@ -0,0 +1 @@ +#!/bin/sh diff --git a/autogen.sh b/autogen.sh index 3026a54..778d02e 100755 --- a/autogen.sh +++ b/autogen.sh @@ -26,6 +26,10 @@ function build() { mkdir -p build/etc/remaster/ cp -v src/config.sample.cfg build/etc/remaster/config.sample.cfg + #changelog + mkdir -p build/usr/share/doc/remaster + cp -v changes/remaster.md build/usr/share/doc/remaster/changelog + gzip build/usr/share/doc/remaster/changelog } #config ... @@ -56,6 +60,31 @@ function install() { set_libdir "/usr/lib/remaster" #cp -f -r build/* / } +function build_deb() { + clean + #prebuild + build + set_rootdir "" + set_libdir "/usr/lib/remaster" + #### + ## changes for deb file + #### + cp -v -r -f DEBIAN build/ + #create md5sums + find ./build -type f -exec md5sum {} \; | grep -v './build/DEBIAN' | sed 's/\.\/build\///g' > build/DEBIAN/md5sums + #set size + SIZE="`du --exclude=build/DEBIAN -c build/ | cut -f 1 | tail -n 1`" + sed -i "s//$SIZE/g" build/DEBIAN/control + + ## + #build deb + ## + dpkg -b build/ + version="`cat build/DEBIAN/control | grep Version | cut -d " " -f 2`" + arch="`cat build/DEBIAN/control | grep Arch | cut -d " " -f 2`" + [ -f "release/remaster_"$version"_"$arch".deb" ] && rm "release/remaster_"$version"_"$arch".deb" + mv -v "build.deb" "release/remaster_"$version"_"$arch".deb" +} case "$1" in @@ -71,7 +100,10 @@ case "$1" in build) build || exit 1 ;; + build_deb) + build_deb || exit 1 + ;; *) - echo "Usage: install | clean | debug | build" + echo "Usage: install | clean | debug | build_deb" exit 1 esac diff --git a/script/set_version.sh b/script/set_version.sh index e9860c7..c8f7635 100755 --- a/script/set_version.sh +++ b/script/set_version.sh @@ -20,3 +20,7 @@ date=`date +%Y-%m-%d` echo $date - $version >> changes/remaster.md echo pleace update changes/remaster.md } + +[ -f "DEBIAN/control" ] && { + sed -i "s/Version:\ .\..\../Version:\ $version_sed/g" "DEBIAN/control" +} From 7aadb795fff967a420faa26f9723a68c1d18d155 Mon Sep 17 00:00:00 2001 From: 6543 Date: Sat, 12 May 2018 20:19:12 +0200 Subject: [PATCH 33/38] =?UTF-8?q?autogen=20irref=C3=BChrende=20namen=20ge?= =?UTF-8?q?=C3=A4ndert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- autogen.sh | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/autogen.sh b/autogen.sh index 778d02e..c645734 100755 --- a/autogen.sh +++ b/autogen.sh @@ -1,15 +1,13 @@ #!/bin/bash -# at the moment only generate dir structure in /build +# install | clean | debug | build-deb -#make ... function clean() { echo "clear build" [ -d build ] && rm -v -R build mkdir build } -function build() { - echo "build ..." - ## skripte copieren ## +function copy() { + echo "copy files ..." # remaster mkdir -p build/usr/bin/ cp -v src/remaster.sh build/usr/bin/remaster @@ -49,21 +47,21 @@ function set_libdir() { #modes function debug() { clean - build + copy set_rootdir "`pwd`/build" set_libdir "`pwd`/build/usr/lib/remaster" } function install() { clean - build + copy set_rootdir "" set_libdir "/usr/lib/remaster" #cp -f -r build/* / } -function build_deb() { +function build-deb() { clean #prebuild - build + copy set_rootdir "" set_libdir "/usr/lib/remaster" #### @@ -97,13 +95,13 @@ case "$1" in debug) debug || exit 1 ;; - build) - build || exit 1 + copy) + copy || exit 1 ;; - build_deb) - build_deb || exit 1 + build-deb) + build-deb || exit 1 ;; *) - echo "Usage: install | clean | debug | build_deb" + echo "Usage: install | clean | debug | build-deb" exit 1 esac From 8885e4881f5cefc0bbcfd2e7bb907f6c590ae6e1 Mon Sep 17 00:00:00 2001 From: 6543 Date: Sat, 12 May 2018 20:19:38 +0200 Subject: [PATCH 34/38] autogen beautysh --- autogen.sh | 156 ++++++++++++++++++++++++++--------------------------- 1 file changed, 78 insertions(+), 78 deletions(-) diff --git a/autogen.sh b/autogen.sh index c645734..922a731 100755 --- a/autogen.sh +++ b/autogen.sh @@ -2,106 +2,106 @@ # install | clean | debug | build-deb function clean() { - echo "clear build" - [ -d build ] && rm -v -R build - mkdir build + echo "clear build" + [ -d build ] && rm -v -R build + mkdir build } function copy() { - echo "copy files ..." - # remaster - mkdir -p build/usr/bin/ - cp -v src/remaster.sh build/usr/bin/remaster - chmod +x build/usr/bin/remaster + echo "copy files ..." + # remaster + mkdir -p build/usr/bin/ + cp -v src/remaster.sh build/usr/bin/remaster + chmod +x build/usr/bin/remaster - # modules - mkdir -p build/usr/lib/remaster/ - for i in proj func mods; do - mkdir -p build/usr/lib/remaster/$i - cp -v src/$i/* build/usr/lib/remaster/$i/ - done + # modules + mkdir -p build/usr/lib/remaster/ + for i in proj func mods; do + mkdir -p build/usr/lib/remaster/$i + cp -v src/$i/* build/usr/lib/remaster/$i/ + done - # setting - mkdir -p build/etc/remaster/ - cp -v src/config.sample.cfg build/etc/remaster/config.sample.cfg + # setting + mkdir -p build/etc/remaster/ + cp -v src/config.sample.cfg build/etc/remaster/config.sample.cfg - #changelog - mkdir -p build/usr/share/doc/remaster - cp -v changes/remaster.md build/usr/share/doc/remaster/changelog - gzip build/usr/share/doc/remaster/changelog + #changelog + mkdir -p build/usr/share/doc/remaster + cp -v changes/remaster.md build/usr/share/doc/remaster/changelog + gzip build/usr/share/doc/remaster/changelog } #config ... function set_rootdir() { - sed -i "s##$1#g" build/usr/bin/remaster - for i in proj func mods; do - sed -i "s##$1#g" build/usr/lib/remaster/$i/* - done + sed -i "s##$1#g" build/usr/bin/remaster + for i in proj func mods; do + sed -i "s##$1#g" build/usr/lib/remaster/$i/* + done } function set_libdir() { - sed -i "s##$1#g" build/usr/bin/remaster - for i in proj func mods; do - sed -i "s##$1#g" build/usr/lib/remaster/$i/* - done + sed -i "s##$1#g" build/usr/bin/remaster + for i in proj func mods; do + sed -i "s##$1#g" build/usr/lib/remaster/$i/* + done } #modes function debug() { - clean - copy - set_rootdir "`pwd`/build" - set_libdir "`pwd`/build/usr/lib/remaster" + clean + copy + set_rootdir "`pwd`/build" + set_libdir "`pwd`/build/usr/lib/remaster" } function install() { - clean - copy - set_rootdir "" - set_libdir "/usr/lib/remaster" - #cp -f -r build/* / + clean + copy + set_rootdir "" + set_libdir "/usr/lib/remaster" + #cp -f -r build/* / } function build-deb() { - clean - #prebuild - copy - set_rootdir "" - set_libdir "/usr/lib/remaster" - #### - ## changes for deb file - #### - cp -v -r -f DEBIAN build/ - #create md5sums - find ./build -type f -exec md5sum {} \; | grep -v './build/DEBIAN' | sed 's/\.\/build\///g' > build/DEBIAN/md5sums - #set size - SIZE="`du --exclude=build/DEBIAN -c build/ | cut -f 1 | tail -n 1`" - sed -i "s//$SIZE/g" build/DEBIAN/control + clean + #prebuild + copy + set_rootdir "" + set_libdir "/usr/lib/remaster" + #### + ## changes for deb file + #### + cp -v -r -f DEBIAN build/ + #create md5sums + find ./build -type f -exec md5sum {} \; | grep -v './build/DEBIAN' | sed 's/\.\/build\///g' > build/DEBIAN/md5sums + #set size + SIZE="`du --exclude=build/DEBIAN -c build/ | cut -f 1 | tail -n 1`" + sed -i "s//$SIZE/g" build/DEBIAN/control - ## - #build deb - ## - dpkg -b build/ - version="`cat build/DEBIAN/control | grep Version | cut -d " " -f 2`" - arch="`cat build/DEBIAN/control | grep Arch | cut -d " " -f 2`" - [ -f "release/remaster_"$version"_"$arch".deb" ] && rm "release/remaster_"$version"_"$arch".deb" - mv -v "build.deb" "release/remaster_"$version"_"$arch".deb" + ## + #build deb + ## + dpkg -b build/ + version="`cat build/DEBIAN/control | grep Version | cut -d " " -f 2`" + arch="`cat build/DEBIAN/control | grep Arch | cut -d " " -f 2`" + [ -f "release/remaster_"$version"_"$arch".deb" ] && rm "release/remaster_"$version"_"$arch".deb" + mv -v "build.deb" "release/remaster_"$version"_"$arch".deb" } case "$1" in - install) - install || exit 1 - ;; - clean) - clean || exit 1 - ;; - debug) - debug || exit 1 - ;; - copy) - copy || exit 1 - ;; - build-deb) - build-deb || exit 1 - ;; - *) - echo "Usage: install | clean | debug | build-deb" - exit 1 + install) + install || exit 1 + ;; + clean) + clean || exit 1 + ;; + debug) + debug || exit 1 + ;; + copy) + copy || exit 1 + ;; + build-deb) + build-deb || exit 1 + ;; + *) + echo "Usage: install | clean | debug | build-deb" + exit 1 esac From b0ce2cfa164887cc75e6a2fda453ed42f927280a Mon Sep 17 00:00:00 2001 From: 6543 Date: Sat, 12 May 2018 22:37:35 +0200 Subject: [PATCH 35/38] lintian improvements --- DEBIAN/conffiles | 1 + DEBIAN/control | 2 +- autogen.sh | 29 +++++++++++++++++++++++++++-- 3 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 DEBIAN/conffiles diff --git a/DEBIAN/conffiles b/DEBIAN/conffiles new file mode 100644 index 0000000..00efd0f --- /dev/null +++ b/DEBIAN/conffiles @@ -0,0 +1 @@ +/etc/remaster/config.sample.cfg diff --git a/DEBIAN/control b/DEBIAN/control index 7ae5be4..1347ee3 100644 --- a/DEBIAN/control +++ b/DEBIAN/control @@ -4,7 +4,7 @@ Version: 1.9.3 Architecture: all Maintainer: 6543 <6543@obermui.de> Installed-Size: -Depends: squashfs-tools, xorriso, wget, sed, sendemail, bash +Depends: squashfs-tools, xorriso, wget, sed (>= 4.2), sendemail, bash (>= 4.3) Suggests: nfs-kernel-server, isc-dhcp-server Section: utils Priority: optional diff --git a/autogen.sh b/autogen.sh index 922a731..d992954 100755 --- a/autogen.sh +++ b/autogen.sh @@ -27,7 +27,10 @@ function copy() { #changelog mkdir -p build/usr/share/doc/remaster cp -v changes/remaster.md build/usr/share/doc/remaster/changelog - gzip build/usr/share/doc/remaster/changelog + gzip --best build/usr/share/doc/remaster/changelog +} +function rights() { + echo ja } #config ... @@ -47,19 +50,37 @@ function set_libdir() { #modes function debug() { clean + + #prebuild copy set_rootdir "`pwd`/build" set_libdir "`pwd`/build/usr/lib/remaster" } function install() { + #überprüfe auf root + [ "`id -u`" != "0" ] && { echo "Error start as root"; exit 1; } + + #lösche alltes build dir clean + + #prebuild copy set_rootdir "" set_libdir "/usr/lib/remaster" - #cp -f -r build/* / + + #set owner + chown -r root:root build/ + + #install + cp -f -r build/* / } function build-deb() { + #überprüfe auf root + [ "`id -u`" != "0" ] && { echo "Error start as root"; exit 1; } + + #lösche alltes build dir clean + #prebuild copy set_rootdir "" @@ -70,10 +91,14 @@ function build-deb() { cp -v -r -f DEBIAN build/ #create md5sums find ./build -type f -exec md5sum {} \; | grep -v './build/DEBIAN' | sed 's/\.\/build\///g' > build/DEBIAN/md5sums + #set size SIZE="`du --exclude=build/DEBIAN -c build/ | cut -f 1 | tail -n 1`" sed -i "s//$SIZE/g" build/DEBIAN/control + #set owner + chown -r root:root build/ + ## #build deb ## From d63d13fe80761e5e129a358f89bcf5132a5ec396 Mon Sep 17 00:00:00 2001 From: 6543 Date: Sat, 12 May 2018 22:40:41 +0200 Subject: [PATCH 36/38] del dummy func --- autogen.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/autogen.sh b/autogen.sh index d992954..d9b6286 100755 --- a/autogen.sh +++ b/autogen.sh @@ -29,9 +29,6 @@ function copy() { cp -v changes/remaster.md build/usr/share/doc/remaster/changelog gzip --best build/usr/share/doc/remaster/changelog } -function rights() { - echo ja -} #config ... function set_rootdir() { @@ -91,6 +88,7 @@ function build-deb() { cp -v -r -f DEBIAN build/ #create md5sums find ./build -type f -exec md5sum {} \; | grep -v './build/DEBIAN' | sed 's/\.\/build\///g' > build/DEBIAN/md5sums + chmod 0644 build/DEBIAN/md5sums #set size SIZE="`du --exclude=build/DEBIAN -c build/ | cut -f 1 | tail -n 1`" From 1134235acd047c05b4e85e1d85036fa3a22adcb5 Mon Sep 17 00:00:00 2001 From: 6543 Date: Sat, 12 May 2018 22:56:13 +0200 Subject: [PATCH 37/38] clean --- LICENSE | 674 --------------- README.md | 23 - doc/Error_Liste.txt | 20 - doc/Server Bedienung.odt | Bin 16515 -> 0 bytes doc/Server Bedienung.pdf | Bin 56758 -> 0 bytes src/remaster.sh | 1708 -------------------------------------- 6 files changed, 2425 deletions(-) delete mode 100644 LICENSE delete mode 100644 README.md delete mode 100644 doc/Error_Liste.txt delete mode 100644 doc/Server Bedienung.odt delete mode 100644 doc/Server Bedienung.pdf delete mode 100755 src/remaster.sh diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 9a4eebc..0000000 --- a/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - {one line to give the program's name and a brief idea of what it does.} - Copyright (C) 2018 6543@obermui.de - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - remaster Copyright (C) 2018 6543@obermui.de - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/README.md b/README.md deleted file mode 100644 index 805691e..0000000 --- a/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# remaster - -in restructure at the moment ... - -# Description -The aim of this Project is to create a daemon for a server, -witch update live systems. -You should only have to install the modules for different OS/Live-Projects. -It also set the right network settings (Proxy, DNS, ...) -and will be extendible wit PXE menu. -additional: Web Interface (Create/Change/Delete Jobs; Download Latest ISO; Start/Stop PXE Server) - -# To-do - * general structure - * split into modules - * more OS - * make it more flexible - * ... (look at issues) - -# At the Moment - * Ubuntu/Debian - * Desinfect17 - * no config file (all settings in script header) diff --git a/doc/Error_Liste.txt b/doc/Error_Liste.txt deleted file mode 100644 index c90360c..0000000 --- a/doc/Error_Liste.txt +++ /dev/null @@ -1,20 +0,0 @@ -Erorr Liste: - -ID: Description ----------------------------------------------------- -1 Allgemeiner Fehler -2 No Paramters / wrong parameters -3 Wrong Settings! -4 Programm missing - -10 no root -11 file no found -12 dir not found -13 cant create/delete file/dir -14 corrupt file (unsquashfs, mount iso, ...) -15 wrong file (iso has no squashfs-file ...) - - -20 mount error -21 unmoun error -22 incorrect filesystem diff --git a/doc/Server Bedienung.odt b/doc/Server Bedienung.odt deleted file mode 100644 index 2fc0b1374aab9303f3867757555dacf3b7a51900..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16515 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 U&+Avn7z$9y`^?qD{p;KR15j-4-~a#s diff --git a/doc/Server Bedienung.pdf b/doc/Server Bedienung.pdf deleted file mode 100644 index cb15abf620cd621b1110dcfdf34c649f6365011d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56758 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 MR16K7PArxG1)f)vOaK4? diff --git a/src/remaster.sh b/src/remaster.sh deleted file mode 100755 index f8bf436..0000000 --- a/src/remaster.sh +++ /dev/null @@ -1,1708 +0,0 @@ -#!/bin/bash -#@version 1.9.0 -#@autor 6543@obermui.de -#@date 2018-03-26 -#@licence GNUv3 - -##################################################################################### -################## S e t t i n g s ################################################## -##################################################################################### - - -## MODUS -modus_default="update_pxe" - -#CD/DVD -#entweder iso_source oder filesystem_source alls quelle -# -> bei iso gen erforderlich! -iso_source="/data/remaster/desinfect-2017.iso" -#destination optinal -iso_destination="/data/remaster/result/custom_desinfect_`date '+%Y-%m-%d'`.iso" -iso_lable="DESINFECT_`date '+%Y-%m-%d'`" - -#Filesystem (for pxe) -#entweder iso_source oder filesystem_source alls quelle -filesystem_source="/data/remaster/result/filesystem.squashfs" - -#Network -proxy_host="proxy.local" -proxy_port="8080" -domain="local" -nameserver="10.x.x.2,10.x.x.1" - -#remaster_script -distro="desinfect2017" - -#LOG -log_file="/data/remaster/logs/`date '+%Y-%m-%d'`.log" -log_mail_source="desinfect@email.clocal" -log_mail_smtp="smtp.mail.local:25" -log_mail_aim="6543@email.clocal" -log_mail_subject="Desinfect_Remaster" - -#Sonstiges -tools_list="xrdp clamav nano htop nmon iftop tmux dsniff nmap openssh-server tightvncserver rsync e2fsprogs foremost gddrescue recoverjpeg safecopy sleuthkit testdisk arp-scan" - - -##################################################################################### -################## M o d e s ######################################################## -##################################################################################### - -#remaster.sh renew -function main_renew() { - - [ -f "$log_file" ] || touch "$log_file" - tail -f "$log_file" --pid="$$" & - - chroot_path="`mktemp -d`" - iso_extr_dir="`mktemp -d`" - - echo "Remaster LOG `date '+%Y-%m-%d'`" > "$log_file" - echo "MODE: renew" >> "$log_file" - echo "HOST: `hostname`" >> "$log_file" - echo >> "$log_file" - - echo "### S e t t i n g s ###" >> "$log_file" - echo "#CD/DVD" >> "$log_file" - echo "iso_source=\"$iso_source\"" >> "$log_file" - echo "iso_destination=\"$iso_destination\"" >> "$log_file" - echo "iso_lable=\"$iso_lable\"" >> "$log_file" - echo >> "$log_file" - - echo "#Filesystem (for pxe)" >> "$log_file" - echo "filesystem_source=\"$filesystem_source\"" >> "$log_file" - echo >> "$log_file" - - echo "#Network" >> "$log_file" - echo "proxy_host=\"$proxy_host\"" >> "$log_file" - echo "proxy_port=\"$proxy_port\"" >> "$log_file" - echo "domain=\"$domain\"" >> "$log_file" - echo "nameserver=\"$nameserver\"" >> "$log_file" - echo >> "$log_file" - - echo "#remaster_script" >> "$log_file" - echo "distro=\"$distro\"" >> "$log_file" - echo >> "$log_file" - - echo "log_file=\"$log_file\"" - echo "log_mail_aim=\"$log_mail_aim\"" - echo "log_mail_subject=\"$log_mail_subject\"" - echo "" - - echo "#Sonstiges" >> "$log_file" - echo "tools_list=\"$tools_list\"" >> "$log_file" - echo $'\n' >> "$log_file" - - echo "### Enviroment ###" - echo "iso_extr_dir=\"$iso_extr_dir\"" >> "$log_file" - echo "chroot_path=\"$chroot_path\"" >> "$log_file" - #env >> "$log_file" - echo $'\n\n' >> "$log_file" - - echo $'### R U N ... ###\n' >> "$log_file" - - #1. Set and Check Enviroment - check_user - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - check_dependency - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - [ "$distro" != "" ] && distro="_$distro" - - # 2. Entpacke ISO - iso_extract "$iso_source" "$iso_extr_dir" - - # 3. Entpacken der Dateien des Live-Systems - filesystem_img="`find "$iso_extr_dir" -name filesystem.squashfs`" - [ -e "$filesystem_img" ] || { - echo "### ERROR ### Image \"$iso_source\" has no \"filesystem.squashfs\"" >> "$log_file" - on_exit 15 >> "$log_file" - } - - filesystem_extract "$filesystem_img" "$chroot_path" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - # 4. Vorbereiten für chroot-Umgebung: - - chroot_initial$distro "$chroot_path" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - # 5. Setzen der Netzwerk-Einstellungen: - - proxy_enable$distro "$chroot_path" "$proxy_host" "$proxy_port" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - dns_set "$chroot_path" "$domain" "$nameserver" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - # 6. Updaten von Desinfec't: - os_update$distro "$chroot_path" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - # 7. Installation optionaler Tools: - - tools_add$distro "$chroot_path" "$tools_list" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - #addo ClamAV to conky_info - sed -i 's/# ${color white}ClamAV/ ${color white}ClamAV/g' "$chroot_path/etc/skel/.conkyrc" - - chroot_clean "$chroot_path" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - # 8. Manuelle Aktionen - deaktiviert - - #echo "Now You Have TIME to do something MANUALY!" - #echo "enter in shell: #> chroot $chroot_path /bin/bash" - #chroot $chroot_path /bin/bash - #echo "Are You Finisch? Then Press [ENTER]" - - #config xrdp to start xfce - echo '#!/bin/sh' > "$chroot_path"/etc/xrdp/startwm.sh - echo "export LANG=\"de_DE.UTF-8\"" >> "$chroot_path"/etc/xrdp/startwm.sh - echo "startxfce4" >> "$chroot_path"/etc/xrdp/startwm.sh - - # 9. Umount - Chroot Umgebung auflösen - - chroot_umount$distro "$chroot_path" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - #Überprüfen ob alles ausgehängt wurde - [ "`chroot_is_mounted "$chroot_path"`" == "true" ] && { - echo "### ERROR ### Cant Unmount Chroot!" >> "$log_file" - on_exit 21 >> "$log_file" - } - - # 10. Packen und Ersetzen der Dateien des Live-Systems - rm "$filesystem_img" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - filesystem_pack "$chroot_path" "$filesystem_img" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - # wenn iso gewünscht - [ "$iso_destination" != "" ] && { - iso_create$distro "$chroot_path" "$iso_extr_dir" "$iso_destination" "$iso_lable" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - } - - # wenn filesystem gewünscht - [ "$filesystem_source" != "" ] && { - #wen bereits forhanden dann löschen - [ -f "$filesystem_source" ] && rm "$filesystem_source" - cp "$filesystem_img" "$filesystem_source" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - chmod 666 "$filesystem_source" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - } - - chmod 666 "$iso_destination" "$filesystem_img" >> "$log_file" - - workspace_erase "$iso_extr_dir/" "$chroot_path/" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - - on_exit 0 -} - -#remaster.sh update_pxe -function main_update_pxe() { - - [ "$log_file" == "" ] && log_file="`mktemp`" - [ -f "$log_file" ] || touch "$log_file" - tail -f "$log_file" --pid="$$" & - - chroot_path="`mktemp -d`" - - echo "Remaster LOG `date '+%Y-%m-%d'`" > "$log_file" - echo "MODE: update_pxe" >> "$log_file" - echo "HOST: `hostname`" >> "$log_file" - echo >> "$log_file" - - echo "### S e t t i n g s ###" >> "$log_file" - echo "#Filesystem (for pxe)" >> "$log_file" - echo "filesystem_source=\"$filesystem_source\"" - echo >> "$log_file" - - echo "#Network" >> "$log_file" - echo "domain=\"$domain\"" >> "$log_file" - echo "nameserver=\"$nameserver\"" >> "$log_file" - echo >> "$log_file" - - echo "#remaster_script" >> "$log_file" - echo "distro=\"$distro\"" >> "$log_file" - echo >> "$log_file" - - echo "log_file=\"$log_file\"" - echo "log_mail_aim=\"$log_mail_aim\"" - echo "log_mail_subject=\"$log_mail_subject\"" - echo "" - - echo "#Sonstiges" >> "$log_file" - echo "tools_list=\"$tools_list\"" >> "$log_file" - echo $'\n' >> "$log_file" - - echo "### Enviroment ###" - echo "chroot_path=\"$chroot_path\"" >> "$log_file" - #env >> "$log_file" - echo $'\n\n' >> "$log_file" - - echo $'### R U N ... ###\n' >> "$log_file" - - #1. Set and Check Enviroment - check_user - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - check_dependency - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - [ "$distro" != "" ] && distro="_$distro" - - # 1. Entpacken der Dateien des Live-Systems - [ -e "$filesystem_source" ] || { - echo "### ERROR ### \"$filesystem_source\" does not exist!" >> "$log_file" - on_exit 15 >> "$log_file" - } - - filesystem_extract "$filesystem_source" "$chroot_path" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - # 2. Vorbereiten für chroot-Umgebung: - - chroot_initial$distro "$chroot_path" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - # 3. Setzen der Netzwerk-Einstellungen: - - dns_set "$chroot_path" "$domain" "$nameserver" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - # 4. Updaten von Desinfec't: - os_update$distro "$chroot_path" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - # 5. Manuelle Aktionen - deaktiviert - - echo "Now You Have TIME to do something MANUALY!" - #echo "enter in shell: - chroot $chroot_path /bin/bash - #echo "Are You Finisch? Then Press [ENTER]" - #read - - # 6. Umount - Chroot Umgebung auflösen - - chroot_umount$distro "$chroot_path" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - #Überprüfen ob alles ausgehängt wurde - [ "`chroot_is_mounted "$chroot_path"`" == "true" ] && { - echo "### ERROR ### Cant Unmount Chroot!" >> "$log_file" - on_exit 21 >> "$log_file" - } - - # 5. Packen und Ersetzen der Dateien - rm "$filesystem_source" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - filesystem_pack "$chroot_path" "$filesystem_source" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - chmod 777 "$filesystem_source" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - workspace_erase "$chroot_path/" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - - on_exit 0 -} - -#remaster.sh update_iso #in arbeit -function main_update_iso() { - [ -f "$log_file" ] || touch "$log_file" - tail -f "$log_file" --pid="$$" & - - chroot_path="`mktemp -d`" - iso_extr_dir="`mktemp -d`" - - echo "Remaster LOG `date '+%Y-%m-%d'`" > "$log_file" - echo "MODE: update_iso" >> "$log_file" - echo "HOST: `hostname`" >> "$log_file" - echo >> "$log_file" - - echo "### S e t t i n g s ###" >> "$log_file" - echo "#CD/DVD" >> "$log_file" - echo "iso_source=\"$iso_source\"" >> "$log_file" - echo "iso_destination=\"$iso_destination\"" >> "$log_file" - echo "iso_lable=\"$iso_lable\"" >> "$log_file" - echo >> "$log_file" - - echo "#Filesystem (for pxe)" >> "$log_file" - echo "filesystem_source=\"$filesystem_source\"" >> "$log_file" - echo >> "$log_file" - - echo "#Network" >> "$log_file" - echo "proxy_host=\"$proxy_host\"" >> "$log_file" - echo "proxy_port=\"$proxy_port\"" >> "$log_file" - echo "domain=\"$domain\"" >> "$log_file" - echo "nameserver=\"$nameserver\"" >> "$log_file" - echo >> "$log_file" - - echo "#remaster_script" >> "$log_file" - echo "distro=\"$distro\"" >> "$log_file" - echo >> "$log_file" - - echo "log_file=\"$log_file\"" - echo "log_mail_aim=\"$log_mail_aim\"" - echo "log_mail_subject=\"$log_mail_subject\"" - echo "" - - echo "#Sonstiges" >> "$log_file" - echo "tools_list=\"$tools_list\"" >> "$log_file" - echo $'\n' >> "$log_file" - - echo "### Enviroment ###" - echo "iso_extr_dir=\"$iso_extr_dir\"" >> "$log_file" - echo "chroot_path=\"$chroot_path\"" >> "$log_file" - #env >> "$log_file" - echo $'\n\n' >> "$log_file" - - echo $'### R U N ... ###\n' >> "$log_file" - - #1. Set and Check Enviroment - check_user - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - check_dependency - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - [ "$distro" != "" ] && distro="_$distro" - - # 2. Entpacke ISO - iso_extract "$iso_source" "$iso_extr_dir" - - # 3. Checke pxe version - # if pxe is set - # if (date != date ); then $0 update_pxe #4.1 - # filesystem = update #4.2 - # else - # extrakt filesystem #5. - # update #6. - # done - # pack iso - - # 3. Entpacken der Dateien des Live-Systems - filesystem_img="`find "$iso_extr_dir" -name filesystem.squashfs`" - [ -e "$filesystem_img" ] || { - echo "### ERROR ### Image \"$iso_source\" has no \"filesystem.squashfs\"" >> "$log_file" - on_exit 15 >> "$log_file" - } - - filesystem_extract "$filesystem_img" "$chroot_path" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - # 4. Vorbereiten für chroot-Umgebung: - - chroot_initial$distro "$chroot_path" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - # 5. Setzen der Netzwerk-Einstellungen: - - proxy_enable$distro "$chroot_path" "$proxy_host" "$proxy_port" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - dns_set "$chroot_path" "$domain" "$nameserver" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - # 6. Updaten von Desinfec't: - os_update$distro "$chroot_path" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - # 7. Installation optionaler Tools: - - tools_add$distro "$chroot_path" "$tools_list" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - #addo ClamAV to conky_info - sed -i 's/# ${color white}ClamAV/ ${color white}ClamAV/g' "$chroot_path/etc/skel/.conkyrc" - - chroot_clean "$chroot_path" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - # 8. Manuelle Aktionen - deaktiviert - - #echo "Now You Have TIME to do something MANUALY!" - #echo "enter in shell: #> chroot $chroot_path /bin/bash" - #chroot $chroot_path /bin/bash - #echo "Are You Finisch? Then Press [ENTER]" - - # 9. Umount - Chroot Umgebung auflösen - - chroot_umount$distro "$chroot_path" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - #Überprüfen ob alles ausgehängt wurde - [ "`chroot_is_mounted "$chroot_path"`" == "true" ] && { - echo "### ERROR ### Cant Unmount Chroot!" >> "$log_file" - on_exit 21 >> "$log_file" - } - - # 10. Packen und Ersetzen der Dateien des Live-Systems - rm "$filesystem_img" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - filesystem_pack "$chroot_path" "$filesystem_img" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - # wenn iso gewünscht - [ "$iso_destination" != "" ] && { - iso_create$distro "$chroot_path" "$iso_extr_dir" "$iso_destination" "$iso_lable" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - } - - # wenn filesystem gewünscht - [ "$filesystem_source" != "" ] && { - #wen bereits forhanden dann löschen - [ -f "$filesystem_source" ] && rm "$filesystem_source" - cp "$filesystem_img" "$filesystem_source" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - chmod 666 "$filesystem_source" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - } - - chmod 666 "$iso_destination" "$filesystem_img" >> "$log_file" - - #11. End - workspace_erase "$iso_extr_dir/" "$chroot_path/" >> "$log_file" - error_level="$?"; [ "$error_level" != "0" ] && on_exit $error_level >> "$log_file" - - - on_exit 0 -} - -#remaster.sh update -function main_update() { - main_update_pxe -} - -#remaster.sh error_code [error_level] -function main_error_code() { - error_code $1 -} - -##################################################################################### -################## F u n c t i o n s ################################################ -##################################################################################### - -### Error Handlings ### - -#on_exit [error_level] -function on_exit() { - #send log and errorlevel[success/errorr xy] - - if [ "$1" != "0" ]; then - log_mail_subject="$log_mail_subject [ERROR]" - else - log_mail_subject="$log_mail_subject [Success]" - fi - - #Mail Body: - for mail_aim in `echo "$log_mail_aim" | tr "," " "`; do - { - echo "$log_mail_subject" - echo $'####################################################################################\n\n' - cat "$log_file" - } | sendemail -s "$log_mail_smtp" -f "$log_mail_source" -t "$mail_aim" -u "$log_mail_subject" -o tls=no - done - - [ "$1" != "0" ] && { - chroot_umount$distro "$chroot_path" 2> /dev/null - workspace_erase "$iso_extr_dir/" "$chroot_path/" 2> /dev/null - } - exit $1 -} - -#error_code [error_level] -function error_code() { - code="$1" - case $code in - "") - echo $'ID:\tDescription\n----------------------------------------------------\n1\tAllgemeiner Fehler\n2\tNo Paramters / wrong parameters' - echo $'3\tWrong Settings\n4\tProgramm missing\n\n10\tno root\n11\tfile no found\n12\tdir not found\n13\tcant create/delete file/dir' - echo $'14\tcorrupt file (unsquashfs, mount iso, ...)\n15\twrong file (iso has no squashfs-file ...)\n16\trequired Packet not found\n\n20\tmount error\n21\tunmoun error\n22\twrong filesystem' - ;; - 1) - echo "Allgemeiner Fehler" - ;; - 2) - echo "No Paramters / wrong parameters" - ;; - 3) - echo "Wrong Settings" - ;; - 4) - echo "Programm missing" - ;; - 10) - echo "not executed as Root" - ;; - 11) - echo "file no found" - ;; - 12) - echo "dir not found" - ;; - 13) - echo "cant create/delete file/dir" - ;; - 14) - echo "corrupt file (unsquashfs, mount iso, ...)" - ;; - 15) - echo "wrong file (iso has no squashfs-file ...)" - ;; - 16) - echo "required Packet not found" - ;; - 20) - echo "tmount error" - ;; - 21) - echo "unmoun error" - ;; - 22) - echo "wrong filesystem" - ;; - *) - echo $'No Defined Error Code.\nPerhaps an Error ocure on a Command wich was started by this Skritp.' - ;; - esac -} - -#check_user -function check_user() { - #check root - [ "`whoami`" == "root" ] || { - echo "### ERROR ### Remaster need ROOT permision!" - return 10 - } -} - -#check_dependency -function check_dependency() { - for packet in squashfs-tools xorriso wget sed sendemail; do - [ "`dpkg -l $packet 2>&1`" == "dpkg-query: Kein Paket gefunden, das auf $packet passt" ] && { - echo "### ERROR ### Packet $packet not installed" - return 16 - } - done - return 0 -} - - -### Workspace ### - -#workspace_erase [workspace_path] -function workspace_erase() { - echo -n "erase workspace ... " - - for dir in "$@"; do - [ -d "$dir" ] && rm -r -f "$dir" - done - - echo "done" -} - -### Filesystem ### - -#filesystem_extract [filesystem_img_source] [chroot_path] -function filesystem_extract() { - echo "extract filesystem ..." - - #$1 = filesystem_img_source - #$2 = chroot_path - filesystem_img_source="$1" - chroot_path="$2" - filesystem_log="`mktemp`" - - #Überfrüfen der Parameter - [ -f "$filesystem_img_source" ] || { - echo "### ERROR ### filesystem_extract: squashfs \"$filesystem_img_source\" not exist!" - return 11 - } - - [ "`mkdir -p "$chroot_path"`" != "" ] && { - echo "### ERROR ### filesystem_extract: chroot_path \"$chroot_path\" can't create!" - return 13 - } - - [ "`filesystem_get_type $chroot_path`" != "ext4" ] && [ "`filesystem_get_type $chroot_path`" != "btrfs" ] && { - echo "### ERROR ### filesystem_extract: wrong filesystem (`filesystem_get_type $chroot_path`)!" - return 22 - } - - rm -r "$chroot_path" - - #eigendliches entpacken - unsquashfs -d "$chroot_path" "$filesystem_img_source" > "$filesystem_log" || { - echo "### ERROR ### filesystem_extract: unsquashfs failed!" - return 14 - } - - grep -v "\[" "$filesystem_log" - rm "$filesystem_log" - - echo "done" -} - -#filesystem_pack [chroot_path] [filesystem_img_destination] -function filesystem_pack() { - echo "pack filesystem ..." - - #$1 = chroot_path - #$2 = filesystem_img_destination - chroot_path="$1" - filesystem_img_destination="$2" - filesystem_log="`mktemp`" - - #Überfrüfen der Parameter - [ -d "$chroot_path" ] || { - echo "### ERROR ### filesystem_extract: chroot_path \"$chroot_path\" not exist!" - return 12 - } - - #loslegen ... - rm -f "$filesystem_img_destination" - mksquashfs "$chroot_path" "$filesystem_img_destination" > "$filesystem_log" || { - echo "### ERROR ### filesystem_pack: mksquashfs failed!" - return 13 - } - - grep -v "\[" "$filesystem_log" - rm "$filesystem_log" - - echo "done" -} - -#filesystem_get_type [dir] -#(String)-> ext4, ext2, btfs, fuse, ... -function filesystem_get_type() { - fs_aTemp=(`df -T "$1"`) - echo ${fs_aTemp[9]} -} - -### ISO ### - -#iso_extract [iso_source] [iso_extr_dir] -function iso_extract() { - echo -n "extract iso ... " - - #$1 = iso_source - #$2 = iso_extr_dir - - #check root - [ "`whoami`" == "root" ] || { - echo "### ERROR ### iso_extract: need root permision!" - return 10 - } - - iso_source="$1" - [ -f "$iso_source" ] || { - echo "### ERROR ### iso_extract: ISO \"$iso_source\" not exist!" - return 11 - } - - iso_extr_dir="$2" - [ -d "$iso_extr_dir" ] || { - echo "### ERROR ### iso_extract: aim directory not exist!" - return 12 - } - - #mace tmp mountpoint - tmpdir="`mktemp -d`" - [ -d "$iso_extr_dir" ] && { - rm -r "$iso_extr_dir/" - mkdir "$iso_extr_dir" - } - - #copy files ... - mount -o loop,ro "$iso_source" "$tmpdir" - cp -f -r "$tmpdir/"* "$iso_extr_dir" - - #clear tmp mountpoint - umount "$iso_source" - rm -r "$tmpdir" - tmpdir= - - echo "done" -} - -#iso_create [chroot_path] [iso_extr_dir] [iso_destination] [iso_lable] -function iso_create() { - echo -n "create iso ..." - - chroot_path="$1" - iso_extr_dir="$2" - iso_destination="$3" - iso_lable="$4" - - [ -e "$iso_destination" ] && rm "$iso_destination" - - xorriso -as mkisofs -graft-points -c isolinux/boot.cat -b isolinux/isolinux.bin \ - -no-emul-boot -boot-info-table -boot-load-size 4 -isohybrid-mbr \ - "$iso_extr_dir/isolinux/isolinux.bin" \ - -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot \ - -isohybrid-gpt-basdat -V "$iso_lable" \ - -o "$iso_destination" \ - -r -J "$iso_extr_dir" \ - --sort-weight 0 / --sort-weight 2 /boot --sort-weight 1 /isolinux - - echo "done" -} - -#iso_create_desinfect2015 [chroot_path] [iso_extr_dir] [iso_destination] [iso_lable] -function iso_create_desinfect2015() { - echo "prepere iso folder ... " - - chroot_path="$1" - iso_extr_dir="$2" - iso_destination="$3" - iso_lable="$4" - - #desinfect - rm "$iso_extr_dir/casper/initrd.lz" - wget http://www.heise.de/ct/projekte/desinfect/des15/initrd.lz -O "$iso_extr_dir/casper/initrd.lz" - - echo "done" - - iso_create "$chroot_path" "$iso_extr_dir" "$iso_destination" "$iso_lable" -} - -#iso_create_desinfect2016 [chroot_path] [iso_extr_dir] [iso_destination] [iso_lable] -function iso_create_desinfect2016() { - #echo "prepere iso folder ... " - - chroot_path="$1" - iso_extr_dir="$2" - iso_destination="$3" - iso_lable="$4" - - #desinfect - #rm "$iso_extr_dir/casper/initrd.lz" - #wget http://www.heise.de/ct/projekte/desinfect/des15/initrd.lz -O "$iso_extr_dir/casper/initrd.lz" - - #echo "done" - - iso_create "$chroot_path" "$iso_extr_dir" "$iso_destination" "$iso_lable" -} - -#iso_create_desinfect2017 [chroot_path] [iso_extr_dir] [iso_destination] [iso_lable] -function iso_create_desinfect2017() { - #echo "prepere iso folder ... " - - chroot_path="$1" - iso_extr_dir="$2" - iso_destination="$3" - iso_lable="$4" - - iso_create "$chroot_path" "$iso_extr_dir" "$iso_destination" "$iso_lable" -} - -### chroot ### - -#chroot_initial [chroot_dir] -function chroot_initial() { - echo -n "initial chroot ... " - - #check chroot dir - chroot_dir="$1" - [ -d "$chroot_dir" ] || { - echo "### ERROR ### chroot_initial: chroot directory not exist" - return 12 - } - - #mount virus definitions - mount -t tmpfs tmpfs "$chroot_dir/tmp" - mount -t tmpfs tmpfs "$chroot_dir/root" - mount --bind /dev "$chroot_dir/dev" - mount --bind /proc "$chroot_dir/proc" - - rm "$chroot_dir/etc/resolv.conf" - cp "/etc/resolv.conf" "$chroot_dir/etc/resolv.conf" - - echo "done" -} - -#chroot_initial_desinfect2015 [chroot_dir] -function chroot_initial_desinfect2015() { - #$1 = chroot dir - - chroot_initial "$1" - - echo -n "initial desinfect on chroot ... " - - #check chroot dir - chroot_dir="$1" - [ -d "$chroot_dir" ] || { - echo "### ERROR ### chroot_initial_desinfect: chroot directory not exist!" - return 12 - } - - #mount virus definitions - #bitdefender - mount --bind $chroot_dir/opt/BitDefender-scanner/var/lib/scan{.orig,} - mount --bind $chroot_dir/var/kl/bases_rd{.orig,} - - echo "done" -} - -#chroot_initial_desinfect2016 [chroot_dir] -function chroot_initial_desinfect2016() { - #$1 = chroot dir - - chroot_initial "$1" - - echo -n "initial desinfect on chroot ... " - - #check chroot dir - chroot_dir="$1" - [ -d "$chroot_dir" ] || { - echo "### ERROR ### chroot_initial_desinfect: chroot directory not exist!" - return 12 - } - - #mount virus definitions - mount --bind $chroot_dir/var/kl/bases_rd{.orig,} - - echo "done" -} - -#chroot_initial_desinfect2017 [chroot_dir] -function chroot_initial_desinfect2017() { - #$1 = chroot dir - - chroot_initial "$1" - -} - - -#chroot_clean [chroot_dir] -function chroot_clean() { - echo "clean chroot ... " - - chroot_dir="$1" - - chroot "$chroot_dir" /bin/bash -c "apt-get clean" - chroot "$chroot_dir" /bin/bash -c "rm -r /var/cache/apt/*" - chroot "$chroot_dir" /bin/bash -c "apt-get update" - chroot "$chroot_dir" /bin/bash -c "apt-get check" - - echo "done" -} - -#chroot_umount [chroot_dir] -function chroot_umount() { - echo -n "unmount chroot ... " - - #check chroot dir - chroot_dir="$1" - [ -d "$chroot_dir" ] || { - echo "### ERROR ### chroot_umount: chroot directory not exist!" - return 12 - } - - for d in "$chroot_dir/tmp" "$chroot_dir/root" "$chroot_dir/proc" "$chroot_dir/dev" ; do - umount $d - retval=$? - [ "$retval" -gt 0 ] && { - echo "### ERROR ### chroot_umount: can't umount \"$d\"!" - return 21 - } - done - - echo "done" -} - -#chroot_umount_desinfect2015 [chroot_dir] -function chroot_umount_desinfect2015() { - #call main mount - chroot_umount "$1" - - echo -n "unmount desinfect on chroot ... " - #check chroot dir - chroot_dir="$1" - [ -d "$chroot_dir" ] || { - echo "### ERROR ### chroot_umount_desinfect: chroot directory not exist!" - return 12 - } - - for d in "$chroot_dir/opt/BitDefender-scanner/var/lib/scan" "$chroot_dir/var/kl/bases_rd" ; do - umount $d - retval=$? - [ "$retval" -gt 0 ] && { - echo "### ERROR ### chroot_umount_desinfect: can't umount \"$d\"!" - return 21 - } - done - - echo "done" -} - -#chroot_umount_desinfect2016 [chroot_dir] -function chroot_umount_desinfect2016() { - #call main mount - chroot_umount "$1" - - echo -n "unmount desinfect on chroot ... " - #check chroot dir - chroot_dir="$1" - [ -d "$chroot_dir" ] || { - echo "### ERROR ### chroot_umount_desinfect: chroot directory not exist!" - return 12 - } - - umount "$chroot_dir/var/kl/bases_rd" - [ "$?" -gt 0 ] && { - echo "### ERROR ### chroot_umount_desinfect: can't umount \"$chroot_dir/var/kl/bases_rd\"!" - #return 21 - } - - echo "done" -} - -#chroot_umount_desinfect2017 [chroot_dir] -function chroot_umount_desinfect2017() { - #call main mount - chroot_umount "$1" -} - -#chroot_is_mounted [chroot_dir] -#(Boolean)-> true | false -function chroot_is_mounted() { - #$1 = chroot directory - - if [ "`mount | grep "$1"`" != "" ] ; then - #ther is smething mounted - echo "true" - else - #nothing mounted - echo "false" - fi -} - -#chroot_sh [chroot_dir] [command] -function chroot_sh() { - #check chroot dir - chroot_dir="$1" - [ -d "$chroot_dir" ] || { - echo "### ERROR ### chroot_sh: chroot directory not exist!" - return 12 - } - - command="$2" - - [ -f "$chroot_dir/tmp/env.sh" ] || { - #if not exist create environment skript - cat "$chroot_dir/etc/environment" | grep -v "#" | grep "=" > "$chroot_dir/tmp/env" - while read line; do echo export $line; done < "$chroot_dir/tmp/env" > "$chroot_dir/tmp/env.sh" - chmod +x "$chroot_dir/tmp/env.sh" && rm "$chroot_dir/tmp/env" - } - - chroot "$chroot_dir" /bin/bash --login -c ". /tmp/env.sh; $command" -} - -### Settings ### -### proxy - -#proxy_enable [chroot_dir] [proxy_host] [proxy_port] -function proxy_enable() { - echo -n "enable proxy ... " - - chroot_dir="$1" - proxy_host="$2" - proxy_port="$3" - - [ -d "$chroot_dir" ] || { - echo "### ERROR ### chroot_umount_desinfect: chroot directory not exist!" - return 12 - } - - #Wenn alle zwei Parameter gegeben - if [ "$proxy_host" != "" ] && [ "$proxy_port" != "" ] ; then - echo "http_proxy=\"http://$proxy_host:$proxy_port\"" >> $chroot_dir/etc/environment - echo "https_proxy=\"http://$proxy_host:$proxy_port\"" >> $chroot_dir/etc/environment - echo "ftp_proxy=\"http://$proxy_host:$proxy_port\"" >> $chroot_dir/etc/environment - - echo "HTTP_PROXY=\"http://$proxy_host:$proxy_port\"" >> $chroot_dir/etc/environment - echo "HTTPS_PROXY=\"http://$proxy_host:$proxy_port\"" >> $chroot_dir/etc/environment - echo "FTP_PROXY=\"http://$proxy_host:$proxy_port\"" >> $chroot_dir/etc/environment - - echo "Acquire::http::Proxy \"http://$proxy_host:$proxy_port\"\;" > $chroot_dir/etc/apt/apt.conf.d/90proxy - echo "Acquire::ftp::Proxy \"ftp://$proxy_host:$proxy_port\"\;" >> $chroot_dir/etc/apt/apt.conf.d/90proxy - - echo "done" - else - if [ "$proxy_host" == "" ] && [ "$proxy_port" == "" ] ; then - echo "done" - else - echo "### ERROR ### proxy_enable: wrong parameters! (\"$chroot_dir\"; \"$proxy_host\"; \"$proxy_port\")" - echo "proxy_enable [chroot_dir] [proxy_host] [proxy_port]" - return 2 - fi - fi -} - -#proxy_enable_desinfect2015 [chroot_dir] [proxy_host] [proxy_port] -function proxy_enable_desinfect2015() { - - proxy_enable $1 $2 $3 - - echo -n "enable proxy for desinfect's av ... " - - chroot_dir="$1" - proxy_host="$2" - proxy_port="$3" - - #Avast AntiVirus - sed -i "s/--skip-master-file/--skip-master-file --proxy-host=$proxy_host --proxy-port=$proxy_port/g" "$chroot_dir/AntiVirUpdate/avupdate" - sed -i "s/--proxy-host=$proxy_host --proxy-port=$proxy_port --proxy-host=$proxy_host --proxy-port=$proxy_port/--proxy-host=$proxy_host --proxy-port=$proxy_port/g" "$chroot_dir/AntiVirUpdate/avupdate" - - #BitDefender - echo "ProxyEnable = Yes" >> "$chroot_dir/etc/BitDefender-scanner/bdscan.conf" - echo "ProxyHost = $proxy_host:$proxy_port" >> "$chroot_dir/etc/BitDefender-scanner/bdscan.conf" - - #Clam AV - echo "HTTPProxyServer $proxy_host" >> "$chroot_dir/etc/clamav/freshclam.conf" - echo "HTTPProxyPort $proxy_port" >> "$chroot_dir/etc/clamav/freshclam.conf" - - #Kaspersky - sed -i "s/0<\/tDWORD>/1<\/tDWORD>/g" "$chroot_dir/etc/kl/config.xml" - sed -i "s/<\/tSTRING>/$proxy_host<\/tSTRING>/g" "$chroot_dir/etc/kl/config.xml" - sed -i "s/<\/tDWORD>/$proxy_port<\/tDWORD>/g" "$chroot_dir/etc/kl/config.xml" - - echo "done" -} - -#proxy_enable_desinfect2016 [chroot_dir] [proxy_host] [proxy_port] -function proxy_enable_desinfect2016() { - - proxy_enable $1 $2 $3 - - echo -n "enable proxy for desinfect's av ... " - - chroot_dir="$1" - proxy_host="$2" - proxy_port="$3" - tmp_file_344532="`mktemp`" - - #Avast AntiVirus - sed -i "s/--skip-master-file/--skip-master-file --proxy-host=$proxy_host --proxy-port=$proxy_port/g" "$chroot_dir/AntiVirUpdate/avupdate" - sed -i "s/--proxy-host=$proxy_host --proxy-port=$proxy_port --proxy-host=$proxy_host --proxy-port=$proxy_port/--proxy-host=$proxy_host --proxy-port=$proxy_port/g" "$chroot_dir/AntiVirUpdate/avupdate" - - #Clam AV - cat "$chroot_dir/etc/clamav/freshclam.conf" | grep -v "HTTPProxyServer" | grep -v "HTTPProxyPort" > "$tmp_file_344532" - rm "$chroot_dir/etc/clamav/freshclam.conf" - cp "$tmp_file_344532" "$chroot_dir/etc/clamav/freshclam.conf" - - echo "HTTPProxyServer $proxy_host" >> "$chroot_dir/etc/clamav/freshclam.conf" - echo "HTTPProxyPort $proxy_port" >> "$chroot_dir/etc/clamav/freshclam.conf" - - #Eset AV - cat "$chroot_dir/etc/opt/eset/esets/esets.cfg" | grep -v "proxy_addr" | grep -v "proxy_port" > "$tmp_file_344532" - rm "$chroot_dir/etc/opt/eset/esets/esets.cfg" - cp "$tmp_file_344532" "$chroot_dir/etc/opt/eset/esets/esets.cfg" - - echo "proxy_addr = \"$proxy_host\"" >> "$chroot_dir/etc/opt/eset/esets/esets.cfg" - echo "proxy_port = $proxy_port" >> "$chroot_dir/etc/opt/eset/esets/esets.cfg" - - #Kaspersky - sed -i "s/0<\/tDWORD>/1<\/tDWORD>/g" "$chroot_dir/etc/kl/config.xml" - sed -i "s/<\/tSTRING>/$proxy_host<\/tSTRING>/g" "$chroot_dir/etc/kl/config.xml" - sed -i "s/<\/tDWORD>/$proxy_port<\/tDWORD>/g" "$chroot_dir/etc/kl/config.xml" - - rm "$tmp_file_344532" - tmp_file_344532= - - echo "done" -} - -#proxy_enable_desinfect2017 [chroot_dir] [proxy_host] [proxy_port] -function proxy_enable_desinfect2017() { - - proxy_enable $1 $2 $3 - - echo "enable proxy for desinfect's av ... " - - chroot_dir="$1" - proxy_host="$2" - proxy_port="$3" - tmp_file_344532="`mktemp`" - - #Avast AntiVirus - if [ -f "$chroot_dir/AntiVirUpdate/avupdate" ]; then - echo "Avast AntiVirus: Found" - sed -i "s/--skip-master-file/--skip-master-file --proxy-host=$proxy_host --proxy-port=$proxy_port/g" "$chroot_dir/AntiVirUpdate/avupdate" - sed -i "s/--proxy-host=$proxy_host --proxy-port=$proxy_port --proxy-host=$proxy_host --proxy-port=$proxy_port/--proxy-host=$proxy_host --proxy-port=$proxy_port/g" "$chroot_dir/AntiVirUpdate/avupdate" - else - eco "Avast AntiVirus: NOT Found" - fi - - #Eset AV - if [ -f "$chroot_dir/etc/opt/eset/esets/esets.cfg" ]; then - echo "Eset AV: Found" - cat "$chroot_dir/etc/opt/eset/esets/esets.cfg" | grep -v "proxy_addr" | grep -v "proxy_port" > "$tmp_file_344532" - rm "$chroot_dir/etc/opt/eset/esets/esets.cfg" - cp "$tmp_file_344532" "$chroot_dir/etc/opt/eset/esets/esets.cfg" - - echo "proxy_addr = \"$proxy_host\"" >> "$chroot_dir/etc/opt/eset/esets/esets.cfg" - echo "proxy_port = $proxy_port" >> "$chroot_dir/etc/opt/eset/esets/esets.cfg" - else - eco "Eset AV: NOT Found" - fi - - #ClamAV - if [ -f "$chroot_dir/etc/clamav/freshclam.conf" ]; then - echo "ClamAV: Found" - cat "$chroot_dir/etc/clamav/freshclam.conf" | grep -v "HTTPProxyServer" | grep -v "HTTPProxyPort" > "$tmp_file_344532" - rm "$chroot_dir/etc/clamav/freshclam.conf" - cp "$tmp_file_344532" "$chroot_dir/etc/clamav/freshclam.conf" - - echo "HTTPProxyServer $proxy_host" >> "$chroot_dir/etc/clamav/freshclam.conf" - echo "HTTPProxyPort $proxy_port" >> "$chroot_dir/etc/clamav/freshclam.conf" - else - eco "ClamAV: NOT Found" - fi - - #Sophos - if [ -f ""$chroot_dir/opt/sophos-av/etc/savd.cfg"" ]; then - echo "Sophos: Found" - echo "sophos:
http://www-proxy.bybn.de:80
" >> "$chroot_dir/opt/sophos-av/etc/savd.cfg" - else - eco "Sophos: NOT Found" - fi - - #F-Secure - if [ -f "$chroot_dir/opt/f-secure/fsaua/fsaua_config.template" ]; then - echo "F-Secure: Found" - echo "enable_fsma=no" >> "$chroot_dir/opt/f-secure/fsaua/fsaua_config.template" - echo "update_servers=http://fsbwserver-direct.f-secure.com" >> "$chroot_dir/opt/f-secure/fsaua/fsaua_config.template" - echo "update_proxies=http://$proxy_host:$proxy_port" >> "$chroot_dir/opt/f-secure/fsaua/fsaua_config.template" - echo "http_proxies=http://$proxy_host:$proxy_port" >> "$chroot_dir/opt/f-secure/fsaua/fsaua_config.template" - cat "$chroot_dir/opt/f-secure/fsaua/fsaua_config.template" > "$chroot_dir/etc/opt/f-secure/fsaua/fsaua_config" - else - eco "F-Secure: NOT Found" - fi - - - rm "$tmp_file_344532" - tmp_file_344532= - - echo "done" -} - - -### dns -#dns_set [chroot_dir] [domain] [nameserver] -function dns_set() { - echo -n "set dns config ... " - - rm "$chroot_dir/etc/resolv.conf" - - [ "$2" != "" ] && echo "domain $2" >> "$chroot_dir/etc/resolv.conf" - echo "search $2" >> "$chroot_dir/etc/resolv.conf" - for namesv in `echo "$3" | tr "," " "`; do - echo "nameserver $namesv" >> "$chroot_dir/etc/resolv.conf" - done - - echo "done" -} - -### source list - -#sourcelist_desinfect_set_nomal2015 [chroot_dir] -function sourcelist_desinfect_set_nomal2015() { - echo -n "build normal source.list ... " - #$1 = chroot directory - - sourcelist="$1/etc/apt/sources.list" - - - echo "#### Desinfe't 2015 ####" > "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://www.heise.de/ct/projekte/desinfect/ubuntu 2015 main" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "# #### Ubuntu 14.04 (trusty) ####" >> "$sourcelist" - echo "#" >> "$sourcelist" - echo "# deb http://de.archive.ubuntu.com/ubuntu trusty main restricted universe multiverse" >> "$sourcelist" - echo "# deb-src http://de.archive.ubuntu.com/ubuntu trusty main restricted universe multiverse" >> "$sourcelist" - echo "#" >> "$sourcelist" - echo "# deb http://de.archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse" >> "$sourcelist" - echo "# deb-src http://de.archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse" >> "$sourcelist" - echo "#" >> "$sourcelist" - echo "# deb http://de.archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse" >> "$sourcelist" - echo "# deb-src http://de.archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse" >> "$sourcelist" - echo "#" >> "$sourcelist" - echo "# deb http://de.archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse" >> "$sourcelist" - echo "# deb-src http://de.archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse" >> "$sourcelist" - echo "#" >> "$sourcelist" - echo "# ## This software is not part of Ubuntu, but is offered by third-party" >> "$sourcelist" - echo "# ## developers who want to ship their latest software." >> "$sourcelist" - echo "# deb http://extras.ubuntu.com/ubuntu trusty main" >> "$sourcelist" - - echo "done" -} - -#sourcelist_desinfect_set_nomal2016 [chroot_dir] -function sourcelist_desinfect_set_nomal2016() { - echo -n "build normal source.list ... " - #$1 = chroot directory - - sourcelist="$1/etc/apt/sources.list" - - - echo "#### Desinfe't 2016 ####" > "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://www.heise.de/ct/projekte/desinfect/ubuntu 2016 main" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "# #### Ubuntu 14.04 (trusty) ####" >> "$sourcelist" - echo "#" >> "$sourcelist" - echo "# deb http://de.archive.ubuntu.com/ubuntu trusty main restricted universe multiverse" >> "$sourcelist" - echo "# deb-src http://de.archive.ubuntu.com/ubuntu trusty main restricted universe multiverse" >> "$sourcelist" - echo "#" >> "$sourcelist" - echo "# deb http://de.archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse" >> "$sourcelist" - echo "# deb-src http://de.archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse" >> "$sourcelist" - echo "#" >> "$sourcelist" - echo "# deb http://de.archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse" >> "$sourcelist" - echo "# deb-src http://de.archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse" >> "$sourcelist" - echo "#" >> "$sourcelist" - echo "# deb http://de.archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse" >> "$sourcelist" - echo "# deb-src http://de.archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse" >> "$sourcelist" - echo "#" >> "$sourcelist" - echo "# ## This software is not part of Ubuntu, but is offered by third-party" >> "$sourcelist" - echo "# ## developers who want to ship their latest software." >> "$sourcelist" - echo "# deb http://extras.ubuntu.com/ubuntu trusty main" >> "$sourcelist" - - echo "done" -} - -#sourcelist_desinfect_set_nomal2017 [chroot_dir] -function sourcelist_desinfect_set_nomal2017() { - echo -n "build normal source.list ... " - #$1 = chroot directory - - sourcelist="$1/etc/apt/sources.list" - - - echo "#### Desinfe't 2017 ####" > "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://www.heise.de/ct/projekte/desinfect/ubuntu 2017 main" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "# #### Ubuntu 16.04 LTS (Xenial) ####" >> "$sourcelist" - echo "#" >> "$sourcelist" - echo "# deb http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse" >> "$sourcelist" - echo "# deb-src http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse" >> "$sourcelist" - echo "#" >> "$sourcelist" - echo "# deb http://security.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse" >> "$sourcelist" - echo "# deb-src http://security.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse" >> "$sourcelist" - echo "#" >> "$sourcelist" - echo "# deb http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse" >> "$sourcelist" - echo "# deb-src http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse" >> "$sourcelist" - echo "#" >> "$sourcelist" - echo "# ## This software is not part of Ubuntu, but is offered by third-party" >> "$sourcelist" - echo "# ## developers who want to ship their latest software." >> "$sourcelist" - echo "# deb http://extras.ubuntu.com/ubuntu xenial main" >> "$sourcelist" - - echo "done" -} - -#sourcelist_desinfect_set_extendet2015 [chroot_dir] -function sourcelist_desinfect_set_extendet2015() { - echo -n "build extendet source.list ... " - - sourcelist="$1/etc/apt/sources.list" - - - echo "#### Desinfe't 2015 ####" > "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://www.heise.de/ct/projekte/desinfect/ubuntu 2015 main" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "#### Ubuntu 14.04 (trusty) ####" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://de.archive.ubuntu.com/ubuntu trusty main restricted universe multiverse" >> "$sourcelist" - echo "deb-src http://de.archive.ubuntu.com/ubuntu trusty main restricted universe multiverse" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://de.archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse" >> "$sourcelist" - echo "deb-src http://de.archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://de.archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse" >> "$sourcelist" - echo "deb-src http://de.archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://de.archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse" >> "$sourcelist" - echo "deb-src http://de.archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "## This software is not part of Ubuntu, but is offered by third-party" >> "$sourcelist" - echo "## developers who want to ship their latest software." >> "$sourcelist" - echo "deb http://extras.ubuntu.com/ubuntu trusty main" >> "$sourcelist" - - echo "done" -} - -#sourcelist_desinfect_set_extendet2016 [chroot_dir] -function sourcelist_desinfect_set_extendet2016() { - echo -n "build extendet source.list ... " - - sourcelist="$1/etc/apt/sources.list" - - - echo "#### Desinfe't 2016 ####" > "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://www.heise.de/ct/projekte/desinfect/ubuntu 2016 main" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "#### Ubuntu 14.04 (trusty) ####" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://de.archive.ubuntu.com/ubuntu trusty main restricted universe multiverse" >> "$sourcelist" - echo "deb-src http://de.archive.ubuntu.com/ubuntu trusty main restricted universe multiverse" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://de.archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse" >> "$sourcelist" - echo "deb-src http://de.archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://de.archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse" >> "$sourcelist" - echo "deb-src http://de.archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://de.archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse" >> "$sourcelist" - echo "deb-src http://de.archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "## This software is not part of Ubuntu, but is offered by third-party" >> "$sourcelist" - echo "## developers who want to ship their latest software." >> "$sourcelist" - echo "deb http://extras.ubuntu.com/ubuntu trusty main" >> "$sourcelist" - - echo "done" -} - -#sourcelist_desinfect_set_extendet2017 [chroot_dir] -function sourcelist_desinfect_set_extendet2017() { - echo -n "build extendet source.list ... " - - sourcelist="$1/etc/apt/sources.list" - - - echo "#### Desinfe't 2017 ####" > "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://www.heise.de/ct/projekte/desinfect/ubuntu 2017 main" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "#### Ubuntu 16.04 LTS (Xenial) ####" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse" >> "$sourcelist" - echo "deb-src http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://security.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse" >> "$sourcelist" - echo "deb-src http://security.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "deb http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse" >> "$sourcelist" - echo "deb-src http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse" >> "$sourcelist" - echo "" >> "$sourcelist" - echo "## This software is not part of Ubuntu, but is offered by third-party" >> "$sourcelist" - echo "## developers who want to ship their latest software." >> "$sourcelist" - echo "deb http://extras.ubuntu.com/ubuntu xenial main" >> "$sourcelist" - - echo "done" -} - -### Update ### - -#os_update [chroot_dir] -function os_update() { - echo "updating os ... " - #$1 = chroot directory - - chroot_dir="$1" - - chroot "$chroot_dir" /bin/bash -c "apt-get update" > /dev/null - [ "$?" == "0" ] && echo "apt-get update: success" - chroot "$chroot_dir" /bin/bash -c "apt-get dist-upgrade -y" | grep -v "wird eingerichtet ..." | grep -v "Vormals nicht ausgewähltes Paket" | grep -v "Entpacken von" | grep -v "Holen: " | grep -v "Trigger für" | grep -v "update-alternatives:" - chroot "$chroot_dir" /bin/bash -c "apt-get clean" - - echo "done" -} - -#os_update_desinfect2015 [chroot_dir] -function os_update_desinfect2015() { - #$1 = chroot directory - - chroot_dir="$1" - - #call main os_update - os_update "$chroot_dir" - - echo "update virus definitions ... " - - #BitDefender - chroot "$chroot_dir" /bin/bash -c "bdscan --update" | grep -v "... updated" - - #Avast Avira - chroot "$chroot_dir" /bin/bash -c "/AntiVirUpdate/avupdate" | grep -v " -> " - - #Clam AV - chroot "$chroot_dir" /bin/bash -c "freshclam" > /dev/null - rm -f "$chroot_dir/var/lib/clamav/daily.cld" - - #Karspersky - echo '#!/bin/bash' > "$chroot_dir/tmp/up_kasp" - echo 'PATH=/usr/lib/kl:$PATH' >> "$chroot_dir/tmp/up_kasp" - echo 'LD_LIBRARY_PATH=/usr/lib/kl:$LD_LIBRARY_PATH' >> "$chroot_dir/tmp/up_kasp" - echo 'KL_PLUGINS_PATH=/usr/lib/kl' >> "$chroot_dir/tmp/up_kasp" - echo 'export PATH LD_LIBRARY_PATH KL_PLUGINS_PATH' >> "$chroot_dir/tmp/up_kasp" - echo '/usr/lib/kl/kav update' >> "$chroot_dir/tmp/up_kasp" - chmod +x "$chroot_dir/tmp/up_kasp" - chroot "$chroot_dir" /bin/bash -c "/tmp/up_kasp" | grep -v ".kdc" | grep -v "File downloaded" - rm "$chroot_dir/tmp/up_kasp" - - - echo "done" -} - -#os_update_desinfect2016 [chroot_dir] -function os_update_desinfect2016() { - #$1 = chroot directory - - chroot_dir="$1" - - #call main os_update - os_update "$chroot_dir" - - echo "update virus definitions ... " - - #Avast Avira - { - echo "Avira ..." - chroot "$chroot_dir" /bin/bash -c "/AntiVirUpdate/avupdate" | grep -v " -> " - echo "Avira done" - } - - #Clam AV - { - echo "ClamAV..." - chroot "$chroot_dir" /bin/bash -c "freshclam" > /dev/null - rm -f "$chroot_dir/var/lib/clamav/daily.cld" - echo "ClamAV done" - } - - #Eset AV - { - echo "Eset AV ..." - tmp_file_23421="`mktemp`" - cat "$chroot_dir/etc/opt/eset/esets/esets.cfg" | grep -v "av_update_username" | grep -v "av_update_password" > "$tmp_file_23421" - cat "$tmp_file_23421" > "$chroot_dir/etc/opt/eset/esets/esets.cfg" - chroot "$chroot_dir" /bin/bash -c "/usr/bin/esetrand" >> "$chroot_dir/etc/opt/eset/esets/esets.cfg" - - echo "set timeout: 2min" - av_eaet_timeout=1200 - tmp_var_3092="`chroot "$chroot_dir" /bin/bash -c "/opt/desinfect/conky_info.sh eset"`" - - #eig. update routine - chroot "$chroot_dir" /bin/bash -c "/etc/init.d/esets restart" - sleep 2 - chroot "$chroot_dir" /bin/bash -c "/opt/eset/esets/sbin/esets_daemon --update" - - #warten auf daemon update ... - sleep 10m - echo "wait 10min for Eset AV update" - while [ "`chroot "$chroot_dir" /bin/bash -c "/opt/desinfect/conky_info.sh eset"`" == "$tmp_var_3092" ]; do - sleep 1 - av_eaet_timeout=$((av_eaet_timeout-1)) - [ $av_eaet_timeout -gt 0 ] || tmp_var_3092= - done - - sleep 4 - - chroot "$chroot_dir" /bin/bash -c "/etc/init.d/esets stop" - - cat "$tmp_file_23421" > "$chroot_dir/etc/opt/eset/esets/esets.cfg" - - rm "$tmp_file_23421" - tmp_file_23421= - tmp_var_3092= - echo "Eset AV done" - } - - #Karspersky - { - echo "Karspersky ..." - #gen update-scrypt - echo '#!/bin/bash' > "$chroot_dir/tmp/up_kasp" - echo 'PATH=/usr/lib/kl:$PATH' >> "$chroot_dir/tmp/up_kasp" - echo 'LD_LIBRARY_PATH=/usr/lib/kl:$LD_LIBRARY_PATH' >> "$chroot_dir/tmp/up_kasp" - echo 'KL_PLUGINS_PATH=/usr/lib/kl' >> "$chroot_dir/tmp/up_kasp" - echo 'export PATH LD_LIBRARY_PATH KL_PLUGINS_PATH' >> "$chroot_dir/tmp/up_kasp" - echo '/usr/lib/kl/kav update' >> "$chroot_dir/tmp/up_kasp" - chmod +x "$chroot_dir/tmp/up_kasp" - - chroot "$chroot_dir" /bin/bash -c "/tmp/up_kasp" | grep -v ".kdc" | grep -v "File downloaded" - rm "$chroot_dir/tmp/up_kasp" - echo "Karspersky done" - } - - echo "update virus definitions done" -} - -#os_update_desinfect2017 [chroot_dir] -function os_update_desinfect2017() { - #$1 = chroot directory - - chroot_dir="$1" - - #call main os_update - os_update "$chroot_dir" - - echo "update virus definitions ... " - - #Avast Avira - { - echo "Avira ..." - #chroot "$chroot_dir" /bin/bash --login -c ". /tmp/env.sh; /AntiVirUpdate/avupdate" | grep -v " -> " - chroot_sh "$chroot_dir" "/AntiVirUpdate/avupdate" | grep -v " -> " - echo "Avira done" - } - - #Clam AV - { - echo "ClamAV..." - #chroot "$chroot_dir" /bin/bash --login -c ". /tmp/env.sh; freshclam" > /dev/null - chroot_sh "$chroot_dir" "freshclam" > /dev/null - rm -f "$chroot_dir/var/lib/clamav/daily.cld" - echo "ClamAV done" - } - - #Eset AV - { - echo "Eset AV ..." - tmp_file_23421="`mktemp`" - cat "$chroot_dir/etc/opt/eset/esets/esets.cfg" | grep -v "av_update_username" | grep -v "av_update_password" > "$tmp_file_23421" - cat "$tmp_file_23421" > "$chroot_dir/etc/opt/eset/esets/esets.cfg" - chroot "$chroot_dir" /bin/bash -c "/usr/bin/esetrand" >> "$chroot_dir/etc/opt/eset/esets/esets.cfg" - - av_eaet_timeout=300 - echo "set timeout: $((av_eaet_timeout/60))min" - tmp_var_3092="`chroot "$chroot_dir" /bin/bash -c "/opt/desinfect/conky_info.sh eset"`" - - #eig. update routine - #chroot "$chroot_dir" /bin/bash -c "/etc/init.d/esets restart" - chroot_sh "$chroot_dir" "/etc/init.d/esets restart" - sleep 2 - #chroot "$chroot_dir" /bin/bash --login -c "/opt/eset/esets/sbin/esets_daemon --update" - chroot_sh "$chroot_dir" "/opt/eset/esets/sbin/esets_daemon --update" - - #warten auf daemon update ... - echo "wait $((av_eaet_timeout/60))min for Eset AV update" - while [ "`chroot "$chroot_dir" /bin/bash -c "/opt/desinfect/conky_info.sh eset"`" == "$tmp_var_3092" ]; do - sleep 10 - av_eaet_timeout=$((av_eaet_timeout-10)) - [ $av_eaet_timeout -gt 0 ] || tmp_var_3092= - done - - sleep 4 - - #chroot "$chroot_dir" /bin/bash -c "/etc/init.d/esets stop" - chroot_sh "$chroot_dir" "/etc/init.d/esets stop" - - cat "$tmp_file_23421" > "$chroot_dir/etc/opt/eset/esets/esets.cfg" - - rm "$tmp_file_23421" - tmp_file_23421= - tmp_var_3092= - echo "Eset AV done" - } - - #Sophos - { - echo "Sophos..." - #chroot "$chroot_dir" /bin/bash --login -c "/opt/sophos-av/bin/savupdate -v3" - chroot_sh "$chroot_dir" "/opt/sophos-av/bin/savupdate -v3" - chroot_sh "$chroot_dir" "/opt/sophos-av/bin/savdstatus --version" - #chroot "$chroot_dir" /bin/bash -c "/opt/sophos-av/bin/savupdate -v3 -a" - echo "Sophos done" - } - - #F-Secure - { - echo "F-Secure..." - chroot_sh "$chroot_dir" "/etc/init.d/fsaua start" - chroot_sh "$chroot_dir" "/etc/init.d/fsupdate stop" - ( sleep 1m; chroot_sh "$chroot_dir" "/etc/init.d/fsaua start" ) & - chroot_sh "$chroot_dir" "/opt/f-secure/fssp/bin/dbupdate_lite" && echo "Update Success" - sleep 1m - chroot_sh "$chroot_dir" "/etc/init.d/fsaua stop" - chroot_sh "$chroot_dir" "/etc/init.d/fsupdate stop" - echo "F-Secure done" - } - - echo "update virus definitions done" -} - - -### Tools ### - -#tools_add [chroot_dir] [tools_list] -function tools_add() { - echo "add tools ... " - #$1 = chroot directory - chroot_dir="$1" - tools_list="$2" - - chroot "$chroot_dir" /bin/bash -c "apt-get update" > /dev/null - [ "$?" == "0" ] && echo "apt-get update: success" - chroot "$chroot_dir" /bin/bash -c "apt-get install -y $tools_list" | grep -v "wird eingerichtet ..." | grep -v "Vormals nicht ausgewähltes Paket" | grep -v "Entpacken von" | grep -v "Holen: " | grep -v "Trigger für" | grep -v "update-alternatives:" - echo "done" -} - -#tools_add_desinfect2015 [chroot_dir] [tools_list] -function tools_add_desinfect2015() { - #$1 = chroot directory - chroot_dir="$1" - tools_list="$2" - - sourcelist_desinfect_set_extendet2015 "$chroot_dir" - tools_add "$chroot_dir" "$tools_list" - sourcelist_desinfect_set_nomal2015 "$chroot_dir" -} - -#tools_add_desinfect2016 [chroot_dir] [tools_list] -function tools_add_desinfect2016() { - #$1 = chroot directory - chroot_dir="$1" - tools_list="$2" - - sourcelist_desinfect_set_extendet2016 "$chroot_dir" - tools_add "$chroot_dir" "$tools_list" - sourcelist_desinfect_set_nomal2016 "$chroot_dir" -} - -#tools_add_desinfect2017 [chroot_dir] [tools_list] -function tools_add_desinfect2017() { - #$1 = chroot directory - chroot_dir="$1" - tools_list="$2" - - sourcelist_desinfect_set_extendet2017 "$chroot_dir" - tools_add "$chroot_dir" "$tools_list" - sourcelist_desinfect_set_nomal2017 "$chroot_dir" -} - - -### Handle Parameters & Modes ### - -#wenn kein modus angegebnen: default modus -if [ -z "$1" ]; then - main_$modus_default -else - main_$1 $2 $3 $4 $5 $6 $7 $8 $9 -fi From ab4622e37a8a611c157ae9ce4ac274f0aac0a102 Mon Sep 17 00:00:00 2001 From: 6543 Date: Sat, 12 May 2018 23:05:54 +0200 Subject: [PATCH 38/38] release-2.0.0 --- DEBIAN/control | 2 +- changes/remaster.md | 7 +++++++ script/set_version.sh | 2 +- src/remaster.sh | 4 ++-- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/DEBIAN/control b/DEBIAN/control index 1347ee3..8580391 100644 --- a/DEBIAN/control +++ b/DEBIAN/control @@ -1,6 +1,6 @@ Package: remaster Source: remaster -Version: 1.9.3 +Version: 2.0.0 Architecture: all Maintainer: 6543 <6543@obermui.de> Installed-Size: diff --git a/changes/remaster.md b/changes/remaster.md index 0834916..469a5a0 100644 --- a/changes/remaster.md +++ b/changes/remaster.md @@ -6,3 +6,10 @@ 2018-05-10 - 1.9.3 * hotfix-1.9.3 + +2018-05-12 - 2.0.0 + * add feature build debian packages + * add Doc "Server Bedienung" + * split functions + * seperte config into /etc/remaster/ + diff --git a/script/set_version.sh b/script/set_version.sh index c8f7635..d170fe9 100755 --- a/script/set_version.sh +++ b/script/set_version.sh @@ -18,7 +18,7 @@ date=`date +%Y-%m-%d` echo >> changes/remaster.md echo $date - $version >> changes/remaster.md - echo pleace update changes/remaster.md + editor changes/remaster.md } [ -f "DEBIAN/control" ] && { diff --git a/src/remaster.sh b/src/remaster.sh index b09c644..1ae8b6d 100755 --- a/src/remaster.sh +++ b/src/remaster.sh @@ -1,7 +1,7 @@ #!/bin/bash -#@version 1.9.3 +#@version 2.0.0 #@autor 6543@obermui.de -#@date 2018-05-10 +#@date 2018-05-12 #@licence GNUv3 #####################################################################################