Skip to content

Instantly share code, notes, and snippets.

@tsjk
Last active May 16, 2021 18:15
Show Gist options
  • Save tsjk/10a9c64eae6e41ecd262a043b1a14907 to your computer and use it in GitHub Desktop.
Save tsjk/10a9c64eae6e41ecd262a043b1a14907 to your computer and use it in GitHub Desktop.
Build a patched proot (x86_64)
#!/bin/bash
pushd ~/".docker" || exit 1; if [[ ! -d "docker-proot-static-build" ]]; then git clone "https://github.com/proot-me/proot-static-build.git" -b build_environment docker-proot-static-build;
else ( cd ~/".docker/docker-proot-static-build" && git pull ); fi; popd
pushd ~/".docker/docker-proot-static-build" || exit 1; docker build -t proot/proot-buildenv:latest -f Dockerfile.x86_64 . || exit 1; popd
if [[ -n "${1}" ]]; then GIT_SHA="${1}"; shift 1; fi
if [[ -n "${1}" ]]; then exit 254; fi
if [[ -z "${GIT_SHA}" ]]; then
#PATCH_STRATEGY="merge"; EXTRA_VERSION="_seccomp"
#GIT_URI='https://github.com/jorge-lip/PRoot.git'; BRANCH="hotfix/seccomp"; # "fdc253bc6983c3e301909747249a9ac063813aa0_seccomp"
#GIT_SHA=$(git ls-remote "https://github.com/proot-me/PRoot.git" | egrep "\s+refs\/heads\/master$" | awk '{ print $1 }'); [[ -n "${GIT_SHA}" ]] || exit 1
PATCH_STRATEGY="patch"; EXTRA_VERSION="_port_mapper"; if [[ -z "${EXTRA_VERSION}" ]]; then EXTRA_VERSION="_seccomp"; else EXTRA_VERSION="${EXTRA_VERSION}+seccomp"; fi
GIT_URI='https://github.com/proot-me/PRoot.git'; BRANCH="port_mapper"
GIT_SHA=$(git ls-remote "${GIT_URI}" | egrep "\s+refs\/heads\/${BRANCH}$" | awk '{ print $1 }'); [[ -n "${GIT_SHA}" ]] || exit 1
if [[ -n "${EXTRA_VERSION}" ]]; then
pushd "/tmp" || exit 1
if [[ ! -f ~/".docker/docker-proot-static-build/src/proot-${GIT_SHA}${EXTRA_VERSION}.tar.gz" || ! -f ~/".docker/docker-proot-static-build/src/care-${GIT_SHA}${EXTRA_VERSION}.tar.gz" ]]; then
if [[ "${PATCH_STRATEGY}" == "merge" ]]; then
# This section does currently not work
git clone "${GIT_URI}" -b "${BRANCH}" "proot-${GIT_SHA}${EXTRA_VERSION}"
pushd "proot-${GIT_SHA}${EXTRA_VERSION}" || exit 1
git remote add upstream "https://github.com/proot-me/PRoot.git"; git fetch upstream
git merge --no-commit -Xours upstream/master
elif [[ "${PATCH_STRATEGY}" == "patch" ]]; then
git clone "${GIT_URI}" -b "${BRANCH}" "proot-${GIT_SHA}${EXTRA_VERSION}"
pushd "proot-${GIT_SHA}${EXTRA_VERSION}" || exit 1
( wget -qO- 'https://github.com/jorge-lip/PRoot/commit/25e8461cbe56a3f035df145d9d762b65aa3eedb7.patch' | \
sed 's/@@ -362,6 +385,7 @@ int event_loop()/@@ -362,5 +385,6 @@ int event_loop()/;/\ *pid_t pid = tracee->pid\;/d;' | patch --dry-run -p1 && \
wget -qO- 'https://github.com/jorge-lip/PRoot/commit/25e8461cbe56a3f035df145d9d762b65aa3eedb7.patch' | \
sed 's/@@ -362,6 +385,7 @@ int event_loop()/@@ -362,5 +385,6 @@ int event_loop()/;/\ *pid_t pid = tracee->pid\;/d;' | patch -p1 ) || exit 1
else
exit 253
fi
popd
tar czvf ~/".docker/docker-proot-static-build/src/proot-${GIT_SHA}${EXTRA_VERSION}.tar.gz" "proot-${GIT_SHA}${EXTRA_VERSION}"
mv -v "proot-${GIT_SHA}${EXTRA_VERSION}" "care-${GIT_SHA}${EXTRA_VERSION}"
tar czvf ~/".docker/docker-proot-static-build/src/care-${GIT_SHA}${EXTRA_VERSION}.tar.gz" "care-${GIT_SHA}${EXTRA_VERSION}"
rm -rf "care-${GIT_SHA}${EXTRA_VERSION}"
fi
else
if [[ ! -f ~/".docker/docker-proot-static-build/src/proot-${GIT_SHA}.tar.gz" || ! -f ~/".docker/docker-proot-static-build/src/care-${GIT_SHA}.tar.gz" ]]; then
git clone "https://github.com/proot-me/PRoot.git" "proot-${GIT_SHA}"
tar czvf ~/".docker/docker-proot-static-build/src/proot-${GIT_SHA}.tar.gz" "proot-${GIT_SHA}"
mv -v "proot-${GIT_SHA}" "care-${GIT_SHA}"
tar czvf ~/".docker/docker-proot-static-build/src/care-${GIT_SHA}.tar.gz" "care-${GIT_SHA}"
rm -rf "care-${GIT_SHA}"
fi
popd
fi
fi
if [[ -f ~/".docker/docker-proot-static-build/src/proot-${GIT_SHA}${EXTRA_VERSION}.tar.gz" && -f ~/".docker/docker-proot-static-build/src/care-${GIT_SHA}${EXTRA_VERSION}.tar.gz" ]]; then
rm -rf "/tmp/proot-static-${GIT_SHA}${EXTRA_VERSION}"
mkdir -p -m0755 "/tmp/proot-static-${GIT_SHA}${EXTRA_VERSION}"
pushd ~/".docker/docker-proot-static-build" || exit 1
PROOT_TARBALL="/home/tamjan/.docker/docker-proot-static-build/src/proot-${GIT_SHA}${EXTRA_VERSION}.tar.gz" \
CARE_TARBALL="/home/tamjan/.docker/docker-proot-static-build/src/care-${GIT_SHA}${EXTRA_VERSION}.tar.gz" \
TARGET_DIR="/tmp/proot-static-${GIT_SHA}${EXTRA_VERSION}" \
./build.sh make care proot -j4
popd
else
exit 2
fi
sudo -v || exit 3
sudo install -o root -g root -m0755 -p -v "/tmp/proot-static-${GIT_SHA}${EXTRA_VERSION}/care" "/usr/local/bin/care-static-${GIT_SHA}${EXTRA_VERSION}"
sudo install -o root -g root -m0644 -p -v "/tmp/proot-static-${GIT_SHA}${EXTRA_VERSION}/care-licenses" "/usr/local/bin/care-licenses-${GIT_SHA}${EXTRA_VERSION}"
sudo install -o root -g root -m0755 -p -v "/tmp/proot-static-${GIT_SHA}${EXTRA_VERSION}/proot" "/usr/local/bin/proot-static-${GIT_SHA}${EXTRA_VERSION}"
sudo install -o root -g root -m0644 -p -v "/tmp/proot-static-${GIT_SHA}${EXTRA_VERSION}/proot-licenses" "/usr/local/bin/proot-licenses-${GIT_SHA}${EXTRA_VERSION}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment