refactored custom core processing, now uses a core directory in the /src

entrpoint now uses exec to call the entrypoint command thus not spawing a subshell
updated uci shell code and added /root/shell so to avoid constant warning about it missing.
add /opt/bin to path in dockerfile
master
David Kebler 2024-10-17 16:17:59 -07:00
parent 70bbfd5c0b
commit ca4713d56b
12 changed files with 48 additions and 17 deletions

1
.gitignore vendored
View File

@ -4,6 +4,7 @@ _opt/
.src .src
TODO.md TODO.md
mnt/ mnt/
core/custom
logs/ logs/
Dockerfile Dockerfile
.env .env

View File

@ -16,6 +16,9 @@ ARG VERBOSE
ARG REBUILD ARG REBUILD
WORKDIR /build WORKDIR /build
# put /opt/bin in path permently
ENV PATH="/opt/bin:${PATH}"
# CORE # CORE
RUN --mount=type=bind,source=./core,target=/build \ RUN --mount=type=bind,source=./core,target=/build \
<<eot <<eot

View File

@ -26,6 +26,13 @@ echo distro $LINUX_DISTRO was validated...continuing
set_distro set_distro
/bin/sh ./packages.sh /bin/sh ./packages.sh
/bin/bash -l ./core.sh /bin/bash -l ./core.sh
if [ -f ./custom/run ]; then
echo custom directory exists with run file inside
cd ./custom || exit
echo sourcing that run file now
/bin/bash -l ./run
cd ..
fi
echo echo
echo "************* End UCI CORE build ********************" echo "************* End UCI CORE build ********************"
else else

17
build
View File

@ -248,20 +248,18 @@ fi
# make a copy of build source locally in build directory # make a copy of build source locally in build directory
if [[ ! $BUILD_SRC = "_core_" ]]; then if [[ ! $BUILD_SRC = "_core_" ]]; then
# copy or bind build source directory to temporary .src/ subdirectory in build repo # copy or bind build source directory to temporary .src/ subdirectory in build repo
_env_dir=rootfs/opt/env
[[ -d $BDIR/.src ]] && rm -rf $BDIR/.src [[ -d $BDIR/.src ]] && rm -rf $BDIR/.src
[[ -d $BDIR/core/$_env_dir ]] && rm -rf $BDIR/core/$_env_dir
if [[ $(which rsync 2> /dev/null ) ]]; then if [[ $(which rsync 2> /dev/null ) ]]; then
rsync -aAru ${BUILD_SRC:-src}/ $BDIR/.src rsync -aAru ${BUILD_SRC:-src}/ $BDIR/.src
rsync -aAru $BDIR/.src/$_env_dir/ $BDIR/core/$_env_dir > /dev/null 2>&1
else else
echo no rsync copying with cp echo no rsync copying with cp
/bin/cp -a ${BUILD_SRC:-src}/. $BDIR/.src > /dev/null 2>&1 /bin/cp -a ${BUILD_SRC:-src}/. $BDIR/.src > /dev/null 2>&1
/bin/cp -a $BDIR/.src/rootfs/opt/env/. $BDIR/core/rootfs/opt/env > /dev/null 2>&1
fi fi
ls -la $BDIR/.src/rootfs ls -la $BDIR/.src/rootfs
fi fi
# create Dockerfile from template # create Dockerfile from template
if ! source $BDIR/Dockerfile.d/create; then if ! source $BDIR/Dockerfile.d/create; then
echo unable to create Dockerfile from template, aborting build echo unable to create Dockerfile from template, aborting build
@ -291,7 +289,13 @@ fi
EOF EOF
fi fi
[[ -f $BDIR/.src/custom-core.sh ]] && /bin/cp $BDIR/.src/custom-core.sh $BDIR/core/ if [[ -d $BDIR/.src/core ]]; then
[[ -d "$BDIR/core/custom" ]] && rm -rf "$BDIR/core/custom"
echo adding the custom core directory to /custom in the core directory
/bin/cp -a "$BDIR/.src/core/." "$BDIR/core/custom"
rm -rf "$BDIR/.src/core/"
ls -la $BDIR/core/custom
fi
pushd "$BDIR" > /dev/null || return 3 pushd "$BDIR" > /dev/null || return 3
@ -321,6 +325,9 @@ if [[ $TARGET == "private" ]]; then
image_push -r $REPO $IMAGE_NAME image_push -r $REPO $IMAGE_NAME
fi fi
# cleanup
[[ -d "$BDIR/core/custom" ]] && rm -rf "$BDIR/core/custom"
} }
# if script was executed then call the function # if script was executed then call the function

View File

@ -11,7 +11,6 @@ if [[ -f ./build.env ]]; then
fi fi
source $LIB_DIR/verbose.lib source $LIB_DIR/verbose.lib
[[ -f ./custom-core.sh ]] && echo "sourcing custom core script" && source "./custom-core.sh"
echo appending pkg commands to core_run.env echo appending pkg commands to core_run.env
echo appending sourcing of $ENV_DIR/run.env if it exists echo appending sourcing of $ENV_DIR/run.env if it exists
cat <<ENV >> /opt/core_run.env cat <<ENV >> /opt/core_run.env

View File

@ -1,10 +1,8 @@
#!/bin/bash #!/bin/bash
env > /tmp/passed.env
source /opt/core_run.env source /opt/core_run.env
cmd=$1 cmd=$1
# [[ $DEVELOPMENT && $cmd == "${ENTRYPOINT_CMD:-start}" ]] && echo "development mode enabled, idling container" && cmd=idle
case "$cmd" in case "$cmd" in
maphostid) maphostid)
@ -34,7 +32,7 @@ cat | /bin/bash -l
;; ;;
${ENTRYPOINT_CMD:-start}) ${ENTRYPOINT_CMD:-start})
shift 1 shift 1
/bin/bash -l -c '${ENTRYPOINT_CMD_PATH:-$BIN_DIR/${ENTRYPOINT_CMD:-start}} $@' $0 "$@" exec /bin/bash -l -c '${ENTRYPOINT_CMD_PATH:-$BIN_DIR/${ENTRYPOINT_CMD:-start}} $@' $0 "$@"
;; ;;
*) *)
echo "--- command passed to container: $* ---" echo "--- command passed to container: $* ---"

View File

@ -1 +0,0 @@
export DEFAULT_DIR=/opt/bin

View File

@ -25,5 +25,7 @@ else
uci_bash_shell_install uci_bash_shell_install
fi fi
mkdir /root/shell
echo "----------- uci shell install complete ------" echo "----------- uci shell install complete ------"

View File

@ -261,10 +261,10 @@ local src; local spath; local spaths
# will determine if there are any minimal build source files/directories # will determine if there are any minimal build source files/directories
check_dir () { check_dir () {
if if
[ $(ls $1/packages/*system.pkgs 2> /dev/null) ] || \ [[ "$(ls $1/packages/*system.pkgs 2> /dev/null)" ]] || \
[ $(ls $1/packages/system/*.pkgs 2> /dev/null) ] || \ [[ "$(ls $1/packages/system/*.pkgs 2> /dev/null)" ]] || \
[ -f $1/packages/repositories.sh ] || \ [[ -f $1/packages/repositories.sh ]] || \
[ -f $1/packages/packages.sh ] [[ -f $1/packages/packages.sh ]];
then then
_packages_=true _packages_=true
return 0 return 0

View File

@ -85,7 +85,7 @@ try_container () {
image=${image:-$IMAGE_NAME} image=${image:-$IMAGE_NAME}
if [[ ! ( $build && $image ) ]]; then if [[ ! ( $build && $image ) ]]; then
echo attempting to getting image name from environment file echo attempting to get image name from environment file
source_env_file $efile source_env_file $efile
image=$(make_image_name) image=$(make_image_name)
fi fi

14
test/src/core/run Normal file
View File

@ -0,0 +1,14 @@
#!/bin/bash
cat ./run
echo This file is run file contents above was in the custom core directory
echo so it was executed. It can now do any modifications to the core layer
echo you can put any additional files you need and call them from this run file
echo the script enters the custom directory so all your reference can be relative.
source .env
env | grep CUST
ls -la
echo rest of the copied core files can be found in /opt
ls -la /opt
echo now it will modify the core_run.env file
echo "echo the core_run.env file was modifed by custom core script" >> /opt/core_run.env

View File

@ -1 +1,2 @@
export DEFAULT_DIR=/opt/bin export DEFAULT_DIR=/opt/bin
export TESTENVAR=thisisatest