Last active
May 16, 2021 18:15
-
-
Save tsjk/10a9c64eae6e41ecd262a043b1a14907 to your computer and use it in GitHub Desktop.
Build a patched proot (x86_64)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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