diff --git a/README.md b/README.md index f60f526..8d92df4 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,8 @@ The script is a new edition of an earlier [mkstage4 script](https://github.com/g More information on mkstage4 can be found on its own Chymeric Tutorials article: [mkstage4 - Stage 4 Tarballs Made Easy](http://tutorials.chymera.eu/blog/2014/05/18/mkstage4-stage4-tarballs-made-easy/). +Chinese Introduction [中文说明](http://liuk.io/blog/gentoo-stage4) + ## Installation The script can be run directly from its containing folder (and thus, is installed simply by downloading or cloning it from here - and adding run permissions): @@ -41,12 +43,14 @@ mkstage4 -t /custom/mount/point archive_name Command line arguments: ``` -mkstage4 [-q -c -b] [-s || -t ] [custom-tar-options] + mkstage4.sh [-q -c -b -l -k] [-s || -t ] [-e ] [custom-tar-options] -q: activates quiet mode (no confirmation). -c: excludes connman network lists. -b: excludes boot directory. -l: excludes lost+found directory. + -e: an additional excludes directory (one dir one -e). -s: makes tarball of current system. + -k: separately save current kernel modules and src (smaller & save decompression time). -t: makes tarball of system located at the . -h: displays help message. ``` @@ -59,6 +63,13 @@ Tarballs created with mkstage4 can be extracted with: tar xvjpf archive_name.tar.bz2 ``` +If you use -k option, extract src & modules separately + +```bash +tar xvjpf archive_name.tar.bz2.kmod +tar xvjpf archive_name.tar.bz2.ksrc +``` + ## Dependencies * **[Bash](https://en.wikipedia.org/wiki/Bash_(Unix_shell))** - in [Portage](http://en.wikipedia.org/wiki/Portage_(software)) as **app-shells/bash** diff --git a/mkstage4.sh b/mkstage4.sh index 9913f68..ac9e0d6 100755 --- a/mkstage4.sh +++ b/mkstage4.sh @@ -12,18 +12,27 @@ EXCLUDE_BOOT=0 EXCLUDE_CONNMAN=0 EXCLUDE_LOST=0 QUIET=0 +USER_EXCL="" +S_KERNEL=0 +x86_64=0 +if [ `getconf LONG_BIT` = "64" ] +then + x86_64=1 +fi USAGE="usage:\n\ - `basename $0` [-q -c -b] [-s || -t ] [custom-tar-options]\n\ + `basename $0` [-q -c -b -l -k] [-s || -t ] [-e ] [custom-tar-options]\n\ -q: activates quiet mode (no confirmation).\n\ -c: excludes connman network lists.\n\ -b: excludes boot directory.\n\ -l: excludes lost+found directory.\n\ + -e: an additional excludes directory (one dir one -e, donot use it with *).\n\ -s: makes tarball of current system.\n\ + -k: separately save current kernel modules and src (smaller & save decompression time).\n\ -t: makes tarball of system located at the .\n\ -h: displays help message." # reads options: -while getopts ':t:sqcblh' flag; do +while getopts ':te:skqcblh' flag; do case "${flag}" in t) TARGET="$OPTARG" @@ -34,6 +43,9 @@ while getopts ':t:sqcblh' flag; do q) QUIET=1 ;; + k) + S_KERNEL=1 + ;; c) EXCLUDE_CONNMAN=1 ;; @@ -43,6 +55,9 @@ while getopts ':t:sqcblh' flag; do l) EXCLUDE_LOST=1 ;; + e) + USER_EXCL+=" --exclude=${OPTARG}" + ;; h) echo -e "$USAGE" exit 0 @@ -100,10 +115,23 @@ fi #Shifts pointer to read custom tar options shift;OPTIONS="$@" +if [ ${S_KERNEL} -eq 1 ] +then + USER_EXCL+=" --exclude=${TARGET}usr/src/* " + if [ ${x86_64} -eq 1 ] + then + USER_EXCL+=" --exclude=${TARGET}lib64/modules/* " + else + USER_EXCL+=" --exclude=${TARGET}lib/modules/* " + fi +fi + + # Excludes: EXCLUDES="\ --exclude=${TARGET}home/*/.bash_history \ --exclude=${TARGET}dev/* \ +--exclude=${TARGET}var/tmp/* \ --exclude=${TARGET}media/* \ --exclude=${TARGET}mnt/*/* \ --exclude=${TARGET}proc/* \ @@ -115,6 +143,8 @@ EXCLUDES="\ --exclude=${TARGET}var/log/* \ --exclude=${TARGET}var/run/*" +EXCLUDES+=$USER_EXCL + if [ "$TARGET" == "/" ] then EXCLUDES+=" --exclude=${STAGE4_FILENAME#/}" @@ -152,6 +182,19 @@ then echo "" echo "COMMAND LINE PREVIEW:" echo "tar $TAR_OPTIONS $EXCLUDES $OPTIONS -f $STAGE4_FILENAME ${TARGET}*" + if [ ${S_KERNEL} -eq 1 ] + then + echo "" + echo "tar $TAR_OPTIONS -f $STAGE4_FILENAME.ksrc ${TARGET}usr/src/linux-$(uname -r)*" + if [ ${x86_64} -eq 1 ] + then + echo "" + echo "tar $TAR_OPTIONS -f $STAGE4_FILENAME.kmod ${TARGET}lib64/modules/$(uname -r)*" + else + echo "" + echo "tar $TAR_OPTIONS -f $STAGE4_FILENAME.kmod ${TARGET}lib/modules/$(uname -r)*" + fi + fi echo "" echo -n "Type \"yes\" to continue or anything else to quit: " read AGREE @@ -161,6 +204,17 @@ fi if [ "$AGREE" == "yes" ] then tar $TAR_OPTIONS $EXCLUDES $OPTIONS -f $STAGE4_FILENAME ${TARGET}* + if [ ${S_KERNEL} -eq 1 ] + then + tar $TAR_OPTIONS -f $STAGE4_FILENAME.ksrc ${TARGET}usr/src/linux-$(uname -r)* + if [ ${x86_64} -eq 1 ] + then + tar $TAR_OPTIONS -f $STAGE4_FILENAME.kmod ${TARGET}lib64/modules/$(uname -r)* + else + tar $TAR_OPTIONS -f $STAGE4_FILENAME.kmod ${TARGET}lib/modules/$(uname -r)* + fi + + fi fi exit 0