Collect libraries in array to prevent repeatedly copying the same files

This commit is contained in:
Daniel Winzen
2021-04-25 15:44:29 +02:00
parent fe71692eb9
commit 5cd74a31b1

View File

@ -4,6 +4,9 @@ export PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin"
test "$1" != "" || (echo "Need path to chroot directory" && exit 1) test "$1" != "" || (echo "Need path to chroot directory" && exit 1)
ALL_LIB_DIRECTORIES=()
ALL_LIB_FILES=()
### functions ### functions
function CHROOT_BINARY() { function CHROOT_BINARY() {
BINARY="$1" BINARY="$1"
@ -15,31 +18,39 @@ function CHROOT_BINARY() {
if [ "$LIB_FILES" != "" ]; then if [ "$LIB_FILES" != "" ]; then
for LIB_FILE in $LIB_FILES; do for LIB_FILE in $LIB_FILES; do
LIB_DIRECTORY="$(dirname $LIB_FILE)" LIB_DIRECTORY="$(dirname $LIB_FILE)"
mkdir -pm 0555 $CHROOT_DIRECTORY$LIB_DIRECTORY if [[ ! "${ALL_LIB_DIRECTORIES[@]}" =~ "$LIB_DIRECTORY" ]]; then
cp $LIB_FILE $CHROOT_DIRECTORY$LIB_FILE ALL_LIB_DIRECTORIES=(${ALL_LIB_DIRECTORIES[@]} "$LIB_DIRECTORY")
chmod 0555 $CHROOT_DIRECTORY$LIB_FILE fi
if [[ ! "${ALL_LIB_FILES[@]}" =~ "$LIB_FILE" ]]; then
ALL_LIB_FILES=(${ALL_LIB_FILES[@]} "$LIB_FILE")
fi
done done
fi fi
if [ "$LDD_FILES" != "" ]; then if [ "$LDD_FILES" != "" ]; then
for LDD_FILE in $LDD_FILES; do for LDD_FILE in $LDD_FILES; do
LDD_DIRECTORY="$(dirname $LDD_FILE)" LDD_DIRECTORY="$(dirname $LDD_FILE)"
mkdir -pm 0555 $CHROOT_DIRECTORY${LDD_DIRECTORY} if [[ ! "${ALL_LIB_DIRECTORIES[@]}" =~ "$LDD_DIRECTORY" ]]; then
cp $LDD_FILE $CHROOT_DIRECTORY$LDD_FILE ALL_LIB_DIRECTORIES=(${ALL_LIB_DIRECTORIES[@]} "$LDD_DIRECTORY")
chmod 0555 $CHROOT_DIRECTORY$LDD_FILE fi
if [[ ! "${ALL_LIB_FILES[@]}" =~ "$LDD_DIRECTORY" ]]; then
ALL_LIB_FILES=(${ALL_LIB_FILES[@]} "$LDD_FILE")
fi
done done
fi fi
cp $BINARY $CHROOT_DIRECTORY/$BINARY BINARY_DIRECTORY="$(dirname $BINARY)"
chmod 0555 $CHROOT_DIRECTORY/$BINARY mkdir -pm 0555 $CHROOT_DIRECTORY$BINARY_DIRECTORY
cp $BINARY $CHROOT_DIRECTORY$BINARY
chmod 0555 $CHROOT_DIRECTORY$BINARY
} }
function CHROOT_FILE() { function CHROOT_LIBRARIES() {
cp $1 $CHROOT_DIRECTORY/$1 for DIRECTORY in ${ALL_LIB_DIRECTORIES[@]}; do
} mkdir -pm 0555 $CHROOT_DIRECTORY$DIRECTORY
done
function CHROOT_DIRECTORY() { for FILE in ${ALL_LIB_FILES[@]}; do
mkdir -pm 0555 $CHROOT_DIRECTORY/$1 cp $FILE $CHROOT_DIRECTORY$FILE
rm -rf $CHROOT_DIRECTORY/$1/ > /dev/null 2>&1 chmod 0555 $CHROOT_DIRECTORY$FILE
cp -Rp $1 $CHROOT_DIRECTORY/$1 done
} }
### variables ### variables
@ -63,6 +74,13 @@ CHROOT_DIRECTORY_STRUCTURE=(
'/var/run' '/var/run'
'/var/run/mysqld' '/var/run/mysqld'
) )
CHROOT_DIRECTORY_TO_CLEAN=(
'/bin'
'/lib'
'/usr/bin'
'/usr/lib'
'/usr/sbin'
)
BINARIES_GENERAL=( BINARIES_GENERAL=(
'/bin/bash' '/bin/bash'
'/bin/bzip2' '/bin/bzip2'
@ -250,6 +268,7 @@ test "$CHROOT_DIRECTORY" != ""
if [ "$2" != "" ]; then if [ "$2" != "" ]; then
CHROOT_BINARY $2 CHROOT_BINARY $2
CHROOT_LIBRARIES
echo "copied extra binary $2"; echo "copied extra binary $2";
exit 0; exit 0;
fi fi
@ -258,6 +277,9 @@ fi
mkdir -p $CHROOT_DIRECTORY mkdir -p $CHROOT_DIRECTORY
chown root:www-data $CHROOT_DIRECTORY chown root:www-data $CHROOT_DIRECTORY
chmod 550 $CHROOT_DIRECTORY chmod 550 $CHROOT_DIRECTORY
for DIRECTORY in ${CHROOT_DIRECTORY_TO_CLEAN[@]}; do
rm -rf $CHROOT_DIRECTORY$DIRECTORY
done
for DIRECTORY in ${CHROOT_DIRECTORY_STRUCTURE[@]}; do for DIRECTORY in ${CHROOT_DIRECTORY_STRUCTURE[@]}; do
mkdir -pm 0555 $CHROOT_DIRECTORY$DIRECTORY mkdir -pm 0555 $CHROOT_DIRECTORY$DIRECTORY
done done
@ -276,14 +298,15 @@ test -e $CHROOT_DIRECTORY/dev/random || mknod -m 644 $CHROOT_DIRECTORY/dev/ra
test -e $CHROOT_DIRECTORY/dev/urandom || mknod -m 644 $CHROOT_DIRECTORY/dev/urandom c 1 9 test -e $CHROOT_DIRECTORY/dev/urandom || mknod -m 644 $CHROOT_DIRECTORY/dev/urandom c 1 9
# copy general directories # copy general directories
for DIRECTORY in ${DIRECTORIES_GENERAL[@]}; do for DIRECTORY in ${DIRECTORIES_GENERAL[@]}; do
CHROOT_DIRECTORY $DIRECTORY rm -rf $CHROOT_DIRECTORY$DIRECTORY
cp -Rp $DIRECTORY $CHROOT_DIRECTORY$DIRECTORY
done done
echo "export HOME=/" > $CHROOT_DIRECTORY/etc/profile.d/hosting.sh echo "export HOME=/" > $CHROOT_DIRECTORY/etc/profile.d/hosting.sh
echo "export HISTFILE=/.bash_history" >> $CHROOT_DIRECTORY/etc/profile.d/hosting.sh echo "export HISTFILE=/.bash_history" >> $CHROOT_DIRECTORY/etc/profile.d/hosting.sh
echo 'export PATH="$PATH:/.composer/vendor/bin"' >> $CHROOT_DIRECTORY/etc/profile.d/hosting.sh echo 'export PATH="$PATH:/.composer/vendor/bin"' >> $CHROOT_DIRECTORY/etc/profile.d/hosting.sh
# copy general files # copy general files
for FILE in ${FILES_GENERAL[@]}; do for FILE in ${FILES_GENERAL[@]}; do
CHROOT_FILE $FILE cp $FILE $CHROOT_DIRECTORY$FILE
done done
### copy shared libraries and binaries ### copy shared libraries and binaries
# general # general
@ -302,4 +325,5 @@ done
for BINARY in /usr/lib/php/*/*.so; do for BINARY in /usr/lib/php/*/*.so; do
CHROOT_BINARY $BINARY CHROOT_BINARY $BINARY
done done
CHROOT_LIBRARIES
ln -f $CHROOT_DIRECTORY/usr/bin/php8.0 $CHROOT_DIRECTORY/usr/bin/php ln -f $CHROOT_DIRECTORY/usr/bin/php8.0 $CHROOT_DIRECTORY/usr/bin/php