Merge pull request #12 from liu-kan/master

add -k option to allow user separately saving current kernel modules and src
This commit is contained in:
Horea Christian 2018-05-24 16:00:10 +02:00 committed by GitHub
commit 4b9460fb2a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 68 additions and 3 deletions

View file

@ -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 <target-mountpoint>] <archive-filename> [custom-tar-options]
mkstage4.sh [-q -c -b -l -k] [-s || -t <target-mountpoint>] [-e <additional excludes dir*>] <archive-filename> [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 <target-mountpoint>.
-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**

View file

@ -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 <target-mountpoint>] <archive-filename> [custom-tar-options]\n\
`basename $0` [-q -c -b -l -k] [-s || -t <target-mountpoint>] [-e <additional excludes dir*>] <archive-filename> [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 <target-mountpoint>.\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