Skip to content

Commit 8f7200b

Browse files
authored
Create install_ix.sh
1 parent 0d3eee1 commit 8f7200b

File tree

1 file changed

+132
-0
lines changed

1 file changed

+132
-0
lines changed

Linux/install_ix.sh

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
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

Comments
 (0)