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)
ALL_LIB_DIRECTORIES=()
ALL_LIB_FILES=()
### functions
function CHROOT_BINARY() {
BINARY="$1"
@ -15,31 +18,39 @@ function CHROOT_BINARY() {
if [ "$LIB_FILES" != "" ]; then
for LIB_FILE in $LIB_FILES; do
LIB_DIRECTORY="$(dirname $LIB_FILE)"
mkdir -pm 0555 $CHROOT_DIRECTORY$LIB_DIRECTORY
cp $LIB_FILE $CHROOT_DIRECTORY$LIB_FILE
chmod 0555 $CHROOT_DIRECTORY$LIB_FILE
if [[ ! "${ALL_LIB_DIRECTORIES[@]}" =~ "$LIB_DIRECTORY" ]]; then
ALL_LIB_DIRECTORIES=(${ALL_LIB_DIRECTORIES[@]} "$LIB_DIRECTORY")
fi
if [[ ! "${ALL_LIB_FILES[@]}" =~ "$LIB_FILE" ]]; then
ALL_LIB_FILES=(${ALL_LIB_FILES[@]} "$LIB_FILE")
fi
done
fi
if [ "$LDD_FILES" != "" ]; then
for LDD_FILE in $LDD_FILES; do
LDD_DIRECTORY="$(dirname $LDD_FILE)"
mkdir -pm 0555 $CHROOT_DIRECTORY${LDD_DIRECTORY}
cp $LDD_FILE $CHROOT_DIRECTORY$LDD_FILE
chmod 0555 $CHROOT_DIRECTORY$LDD_FILE
if [[ ! "${ALL_LIB_DIRECTORIES[@]}" =~ "$LDD_DIRECTORY" ]]; then
ALL_LIB_DIRECTORIES=(${ALL_LIB_DIRECTORIES[@]} "$LDD_DIRECTORY")
fi
if [[ ! "${ALL_LIB_FILES[@]}" =~ "$LDD_DIRECTORY" ]]; then
ALL_LIB_FILES=(${ALL_LIB_FILES[@]} "$LDD_FILE")
fi
done
fi
cp $BINARY $CHROOT_DIRECTORY/$BINARY
chmod 0555 $CHROOT_DIRECTORY/$BINARY
BINARY_DIRECTORY="$(dirname $BINARY)"
mkdir -pm 0555 $CHROOT_DIRECTORY$BINARY_DIRECTORY
cp $BINARY $CHROOT_DIRECTORY$BINARY
chmod 0555 $CHROOT_DIRECTORY$BINARY
}
function CHROOT_FILE() {
cp $1 $CHROOT_DIRECTORY/$1
}
function CHROOT_DIRECTORY() {
mkdir -pm 0555 $CHROOT_DIRECTORY/$1
rm -rf $CHROOT_DIRECTORY/$1/ > /dev/null 2>&1
cp -Rp $1 $CHROOT_DIRECTORY/$1
function CHROOT_LIBRARIES() {
for DIRECTORY in ${ALL_LIB_DIRECTORIES[@]}; do
mkdir -pm 0555 $CHROOT_DIRECTORY$DIRECTORY
done
for FILE in ${ALL_LIB_FILES[@]}; do
cp $FILE $CHROOT_DIRECTORY$FILE
chmod 0555 $CHROOT_DIRECTORY$FILE
done
}
### variables
@ -63,6 +74,13 @@ CHROOT_DIRECTORY_STRUCTURE=(
'/var/run'
'/var/run/mysqld'
)
CHROOT_DIRECTORY_TO_CLEAN=(
'/bin'
'/lib'
'/usr/bin'
'/usr/lib'
'/usr/sbin'
)
BINARIES_GENERAL=(
'/bin/bash'
'/bin/bzip2'
@ -250,6 +268,7 @@ test "$CHROOT_DIRECTORY" != ""
if [ "$2" != "" ]; then
CHROOT_BINARY $2
CHROOT_LIBRARIES
echo "copied extra binary $2";
exit 0;
fi
@ -258,6 +277,9 @@ fi
mkdir -p $CHROOT_DIRECTORY
chown root:www-data $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
mkdir -pm 0555 $CHROOT_DIRECTORY$DIRECTORY
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
# copy general directories
for DIRECTORY in ${DIRECTORIES_GENERAL[@]}; do
CHROOT_DIRECTORY $DIRECTORY
rm -rf $CHROOT_DIRECTORY$DIRECTORY
cp -Rp $DIRECTORY $CHROOT_DIRECTORY$DIRECTORY
done
echo "export HOME=/" > $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
# copy general files
for FILE in ${FILES_GENERAL[@]}; do
CHROOT_FILE $FILE
cp $FILE $CHROOT_DIRECTORY$FILE
done
### copy shared libraries and binaries
# general
@ -302,4 +325,5 @@ done
for BINARY in /usr/lib/php/*/*.so; do
CHROOT_BINARY $BINARY
done
CHROOT_LIBRARIES
ln -f $CHROOT_DIRECTORY/usr/bin/php8.0 $CHROOT_DIRECTORY/usr/bin/php