Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- TARGET=/usr/portage
- TMP_TARGET=${TARGET}_tmp
- FILENAME=/usr/portage.sqfs
- PORTAGE_USER_GROUP='portage:portage'
- USE_TMPFS=1
- TMPFS_OPT='size=2G,nr_inodes=500k,mode=0700'
- SQUASHFS_OPT='-force-uid portage -force-gid portage -no-duplicates -b 65536'
- RED='\e[1;31m'
- NC='\e[0m'
- MOUNTED=0
- TMPFS_MOUNTED=0
- function redexit {
- echo -e "${RED}${1}${NC}"
- exit
- }
- function quit {
- if [ $MOUNTED == 1 ]
- then
- if [ umount $TMP_TARGET ]
- then
- rm -rf $TMP_TARGET
- else
- echo -e "${RED}Failed to unmount $FILENAME on ${TMP_TARGET}${NC}"
- fi
- fi
- if [ $TMPFS_MOUNTED == 1 ]
- then
- umount $TARGET || echo -e "${RED}Failed to unmount tmpfs on ${TARGET}${NC}"
- fi
- exit
- }
- # Unmount 1st.
- for NAME in $TARGET $TARGET $TARGET $TMP_TARGET $TMP_TARGET $TMP_TARGET
- do
- if mount | grep -q " on $NAME type"
- then
- echo -e "Unmouting $NAME"
- umount $NAME || redexit "Failed to unmount $FILENAME on $NAME"
- fi
- done
- [ -d $TMP_TARGET ] && rm -rf $TMP_TARGET
- # if we have .sqfs - use it
- if [ -f $FILENAME ]
- then
- mkdir $TMP_TARGET
- chown $PORTAGE_USER_GROUP $TMP_TARGET
- echo -e "$FILENAME found, remount..."
- mount -t squashfs -o loop,ro $FILENAME $TMP_TARGET || redexit "Failed to mount $FILENAME on ${TMP_TARGET}"
- MOUNTED=1
- fi
- [ -d $TARGET ] && rm -rf $TARGET
- mkdir $TARGET
- chown $PORTAGE_USER_GROUP $TARGET
- if [ $USE_TMPFS == "1" ] && [ $MOUNTED == "1" ]
- then
- echo -e "Mounting TMPFS...";
- mount -t tmpfs -o $TMPFS_OPT tmpfs $TARGET || redexit "Failed to mount tmpfs on ${TARGET}"
- cp $TMP_TARGET/* $TARGET -a
- TMPFS_MOUNTED=1
- fi
- if [ $MOUNTED == "1" ]
- then
- umount $TMP_TARGET || quit
- rm -rf $TMP_TARGET
- MOUNTED=0
- fi
- [ -f ${TARGET}/metadata/timestamp.x ] && rm $TARGET/metadata/timestamp.x
- /usr/lib/portage/bin/emerge-webrsync
- # Building squashfs
- [ -f $FILENAME ] && rm $FILENAME;
- mksquashfs $TARGET $FILENAME $SQUASHFS_OPT || redexit "Making $TARGET fails"
- if [ $TMPFS_MOUNTED == 1 ]
- then
- umount $TARGET || redexit "Failed to unmount tmpfs on ${TARGET}"
- fi
- mount -t squashfs -o loop,ro $FILENAME $TARGET || redexit "Failed to mount $FILENAME on ${TARGET}"
- rm /var/tmp/portage/* -rf
- echo "All done"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement