|
| 1 | +#!/usr/bin/env bash |
| 2 | + |
| 3 | +#-------------------------------------------------------# |
| 4 | +## <DO NOT RUN STANDALONE, meant for CI Only> |
| 5 | +## Meant to Install & Setup: https://github.com/stal-ix/ix |
| 6 | +## use GIT_REPO="https://github.com/pg83/ix" for edge |
| 7 | +###-----------------------------------------------------### |
| 8 | + |
| 9 | +#-------------------------------------------------------# |
| 10 | +##Enable Debug? |
| 11 | + if [[ "${DEBUG}" = "1" ]] || [[ "${DEBUG}" = "ON" ]]; then |
| 12 | + set -x |
| 13 | + fi |
| 14 | +#-------------------------------------------------------# |
| 15 | + |
| 16 | +#-------------------------------------------------------# |
| 17 | +##Setup Deps |
| 18 | + if [[ "$(id -u)" -ne 0 ]]; then |
| 19 | + echo -e "\n[✗] FATAL: This must be run as ROOT\n" |
| 20 | + exit 1 |
| 21 | + fi |
| 22 | + if command -v apk &>/dev/null; then |
| 23 | + apk update ; apk upgrade --no-interactive 2>/dev/null |
| 24 | + apk add 7zip bash binutils build-base coreutils fakeroot findutils file g++ gcompat git grep \ |
| 25 | + jq libc-dev linux-headers lld llvm moreutils parted python3 rsync sudo tar tree util-linux xz zstd --latest --upgrade --no-interactive 2>/dev/null |
| 26 | + elif command -v apt &>/dev/null; then |
| 27 | + export DEBIAN_FRONTEND="noninteractive" |
| 28 | + apt update -y -qq ; apt upgrade -y -qq |
| 29 | + apt install bash binutils build-essential coreutils curl findutils file g++ git grep jq libc-dev \ |
| 30 | + moreutils patchelf python3 rsync sed sudo strace tar tree xz-utils zstd -y -qq 2>/dev/null |
| 31 | + echo "root ALL=(ALL:ALL) ALL" | sudo tee -a "/etc/sudoers" |
| 32 | + fi |
| 33 | +##Check |
| 34 | + yes "y" | sudo bash -c "whoami" 2>/dev/null |
| 35 | + hash -r &>/dev/null |
| 36 | + for DEP_CMD in g++ tar sudo xz; do |
| 37 | + case "$(command -v "${DEP_CMD}" 2>/dev/null)" in |
| 38 | + "") echo -e "\n[✗] FATAL: ${DEP_CMD} is NOT INSTALLED\n" |
| 39 | + exit 1 ;; |
| 40 | + esac |
| 41 | + done |
| 42 | +#-------------------------------------------------------# |
| 43 | + |
| 44 | +#-------------------------------------------------------# |
| 45 | +##Setup ENV |
| 46 | + if [[ -z "${USER+x}" ]] || [[ -z "${USER##*[[:space:]]}" ]]; then |
| 47 | + USER="$(whoami 2>/dev/null | tr -d '[:space:]')" |
| 48 | + fi |
| 49 | + if [[ -z "${HOME+x}" ]] || [[ -z "${HOME##*[[:space:]]}" ]]; then |
| 50 | + HOME="$(getent passwd "${USER}" 2>/dev/null | awk -F':' 'NF >= 6 {print $6}' | tr -d '[:space:]')" |
| 51 | + fi |
| 52 | + export USER HOME |
| 53 | + if [[ ! -d "${HOME}" ]]; then |
| 54 | + mkdir -p "${HOME}" |
| 55 | + fi |
| 56 | +#-------------------------------------------------------# |
| 57 | + |
| 58 | +#-------------------------------------------------------# |
| 59 | +##Install: https://stal-ix.github.io/IX.html |
| 60 | +# : https://stal-ix.github.io/IX_standalone |
| 61 | + if [[ -d "${HOME}" ]]; then |
| 62 | + pushd "${HOME}" &>/dev/null && \ |
| 63 | + sudo rm -rvf "/ix" 2>/dev/null |
| 64 | + rm -rvf "${HOME}/ix" 2>/dev/null |
| 65 | + git clone --depth="1" --filter="blob:none" --quiet "${GIT_REPO:-https://github.com/stal-ix/ix}" |
| 66 | + if [[ -d "${HOME}/ix" ]] && [[ "$(du -s "${HOME}/ix" | cut -f1)" -gt 10 ]]; then |
| 67 | + if [[ -s "${HOME}/ix/ix" ]]; then |
| 68 | + chmod 'a+x' "${HOME}/ix/ix" |
| 69 | + echo '#!/usr/bin/env bash' | sudo tee "/usr/local/bin/ix" |
| 70 | + echo -e "\nc_wd=\"\$(realpath .)\"" | sudo tee -a "/usr/local/bin/ix" |
| 71 | + echo -e "export PATH=\"\${PATH}:/ix/realm/boot/bin\"" | sudo tee -a "/usr/local/bin/ix" |
| 72 | + echo "cd ~/ix && \\" | sudo tee -a "/usr/local/bin/ix" |
| 73 | + echo "sudo --non-interactive \"$(realpath ${HOME}/ix/ix)\" \$@" | sudo tee -a "/usr/local/bin/ix" |
| 74 | + echo "cd \"\${c_wd}\"" | sudo tee -a "/usr/local/bin/ix" |
| 75 | + sudo chmod '+x' "/usr/local/bin/ix" |
| 76 | + else |
| 77 | + echo -e "\n[✗] FATAL: '${HOME}/ix/ix' does NOT exist\n" |
| 78 | + exit 1 |
| 79 | + fi |
| 80 | + else |
| 81 | + echo -e "\n[✗] FATAL: '${HOME}/ix' does NOT exist\n" |
| 82 | + exit 1 |
| 83 | + fi |
| 84 | + hash -r &>/dev/null |
| 85 | + else |
| 86 | + echo -e "\n[✗] FATAL: '\${HOME}' does NOT exist\n" |
| 87 | + exit 1 |
| 88 | + fi |
| 89 | +#-------------------------------------------------------# |
| 90 | + |
| 91 | +#-------------------------------------------------------# |
| 92 | +##Setup |
| 93 | + if command -v ix &>/dev/null; then |
| 94 | + pushd "${HOME}/ix" &>/dev/null |
| 95 | + ( |
| 96 | + while true; do |
| 97 | + if [[ -d "/ix/trash" ]]; then |
| 98 | + echo -e "\n[BG] Purging '/ix/trash'" |
| 99 | + du -sh "/ix/trash" 2>/dev/null ; echo -e "\n" |
| 100 | + sudo rm -rf "/ix/trash" &>/dev/null |
| 101 | + fi |
| 102 | + sleep 120 |
| 103 | + done |
| 104 | + ) & |
| 105 | + bg_pid=$! |
| 106 | + ix mut "bin/ix" |
| 107 | + echo -e "\n" && ix gc lnk url |
| 108 | + if [[ -d "/ix" ]] && [[ "$(du -s "/ix" | cut -f1)" -gt 1000 ]]; then |
| 109 | + du -sh "/ix" |
| 110 | + else |
| 111 | + echo -e "\n[✗] FATAL: '/ix' is probably Broken\n" |
| 112 | + exit 1 |
| 113 | + fi |
| 114 | + else |
| 115 | + echo -e "\n[✗] FATAL: 'ix' is NOT Installed\n" |
| 116 | + exit 1 |
| 117 | + fi |
| 118 | +#-------------------------------------------------------# |
| 119 | + |
| 120 | +#-------------------------------------------------------# |
| 121 | +##Cleanup |
| 122 | + sudo kill -9 "${bg_pid}" 2>/dev/null |
| 123 | + if [[ -d "/ix/trash" ]]; then |
| 124 | + echo -e "\n[BG] Purging '/ix/trash'\n" |
| 125 | + sudo rm -rvf "/ix/trash" &>/dev/null |
| 126 | + sudo mkdir -p "/ix/trash" |
| 127 | + sudo chown --recursive "root" "/ix/trash" &>/dev/null |
| 128 | + fi |
| 129 | + if [[ "${DEBUG}" = "1" ]] || [[ "${DEBUG}" = "ON" ]]; then |
| 130 | + set -x |
| 131 | + fi |
| 132 | +#-------------------------------------------------------# |
0 commit comments