Skip to content

Commit 44dae9f

Browse files
committed
ix
1 parent 14ebfe9 commit 44dae9f

File tree

1 file changed

+158
-0
lines changed

1 file changed

+158
-0
lines changed

Github/Runners/install_ix.sh

Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
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+
##SYSTMP
15+
if [[ -z "${SYSTMP+x}" ]] || [[ -z "${SYSTMP##*[[:space:]]}" ]]; then
16+
SYSTMP="$(dirname "$(mktemp -u)" | tr -d '[:space:]')"
17+
[[ ! -d "${SYSTMP}" ]] && mkdir -p "${SYSTMP}"
18+
export SYSTMP
19+
fi
20+
##Track Time
21+
echo -e "\n==> [+] Started Initiating at :: $(TZ='UTC' date +'%A, %Y-%m-%d (%I:%M:%S %p)') UTC\n"
22+
START_TIME="$(date '+%s')"
23+
export START_TIME
24+
#-------------------------------------------------------#
25+
26+
#-------------------------------------------------------#
27+
##Setup Deps
28+
if [[ "$(id -u)" -ne 0 ]]; then
29+
echo -e "\n[✗] FATAL: This must be run as ROOT\n"
30+
exit 1
31+
fi
32+
if command -v apk &>/dev/null; then
33+
apk update ; apk upgrade --no-interactive 2>/dev/null
34+
apk add 7zip bash binutils build-base coreutils fakeroot findutils file g++ gcompat git grep \
35+
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
36+
elif command -v apt &>/dev/null; then
37+
export DEBIAN_FRONTEND="noninteractive"
38+
apt update -y -qq ; apt upgrade -y -qq
39+
apt install bash binutils build-essential coreutils curl findutils file g++ git grep jq libc-dev \
40+
moreutils patchelf python3 rsync sed sudo strace tar tree xz-utils zstd -y -qq 2>/dev/null
41+
fi
42+
##Check
43+
yes "y" | sudo bash -c "whoami" &>/dev/null
44+
hash -r &>/dev/null
45+
for DEP_CMD in g++ rsync sudo tar xz; do
46+
case "$(command -v "${DEP_CMD}" 2>/dev/null)" in
47+
"") echo -e "\n[✗] FATAL: ${DEP_CMD} is NOT INSTALLED\n"
48+
exit 1 ;;
49+
esac
50+
done
51+
#-------------------------------------------------------#
52+
53+
#-------------------------------------------------------#
54+
##Setup ENV
55+
if [[ -z "${USER+x}" ]] || [[ -z "${USER##*[[:space:]]}" ]]; then
56+
USER="$(whoami 2>/dev/null | tr -d '[:space:]')"
57+
fi
58+
if [[ -z "${HOME+x}" ]] || [[ -z "${HOME##*[[:space:]]}" ]]; then
59+
HOME="$(getent passwd "${USER}" 2>/dev/null | awk -F':' 'NF >= 6 {print $6}' | tr -d '[:space:]')"
60+
fi
61+
export USER HOME
62+
if [[ ! -d "${HOME}" ]]; then
63+
mkdir -p "${HOME}"
64+
fi
65+
#-------------------------------------------------------#
66+
67+
#-------------------------------------------------------#
68+
##Install: https://stal-ix.github.io/IX.html
69+
# : https://stal-ix.github.io/IX_standalone
70+
if [[ -d "${HOME}" ]]; then
71+
pushd "${HOME}" &>/dev/null && \
72+
sudo rm -rvf "/ix" 2>/dev/null
73+
rm -rvf "${HOME}/ix" 2>/dev/null
74+
git clone --depth="1" --filter="blob:none" --quiet "${GIT_REPO:-https://github.com/stal-ix/ix}"
75+
if [[ -d "${HOME}/ix" ]] && [[ "$(du -s "${HOME}/ix" | cut -f1)" -gt 10 ]]; then
76+
if [[ -s "${HOME}/ix/ix" ]]; then
77+
chmod 'a+x' "${HOME}/ix/ix"
78+
echo '#!/usr/bin/env bash' | sudo tee "/usr/local/bin/ix"
79+
echo -e "\nc_wd=\"\$(realpath .)\"" | sudo tee -a "/usr/local/bin/ix"
80+
echo -e "export PATH=\"\${PATH}:/ix/realm/boot/bin\"" | sudo tee -a "/usr/local/bin/ix"
81+
echo "cd ~/ix && \\" | sudo tee -a "/usr/local/bin/ix"
82+
echo "sudo --non-interactive \"$(realpath ${HOME}/ix/ix)\" \$@" | sudo tee -a "/usr/local/bin/ix"
83+
echo "cd \"\${c_wd}\"" | sudo tee -a "/usr/local/bin/ix"
84+
sudo chmod '+x' "/usr/local/bin/ix"
85+
else
86+
echo -e "\n[✗] FATAL: '${HOME}/ix/ix' does NOT exist\n"
87+
exit 1
88+
fi
89+
else
90+
echo -e "\n[✗] FATAL: '${HOME}/ix' does NOT exist\n"
91+
exit 1
92+
fi
93+
hash -r &>/dev/null
94+
else
95+
echo -e "\n[✗] FATAL: '\${HOME}' does NOT exist\n"
96+
exit 1
97+
fi
98+
#-------------------------------------------------------#
99+
100+
#-------------------------------------------------------#
101+
##Setup
102+
if command -v ix &>/dev/null; then
103+
pushd "${HOME}/ix" &>/dev/null
104+
(
105+
while true; do
106+
if [[ -d "/ix/trash" ]]; then
107+
echo -e "\n[BG] Purging '/ix/trash'"
108+
du -sh "/ix/trash" 2>/dev/null ; echo -e "\n"
109+
sudo rsync -a --delete --exclude='.*' "/dev/null/" "/ix/trash/" &>/dev/null
110+
#sudo rm -rf "/ix/trash" &>/dev/null
111+
#sudo mkdir -p "/ix/trash"
112+
#sudo chown --recursive "root" "/ix/trash" &>/dev/null
113+
fi
114+
sleep 120
115+
done
116+
) &
117+
bg_pid=$!
118+
ix mut "bin/ix"
119+
#echo -e "\n" && ix gc lnk url
120+
#Check Dir Size
121+
if [[ -d "/ix" ]] && [[ "$(du -s "/ix" | cut -f1)" -gt 1000 ]]; then
122+
du -sh "/ix"
123+
else
124+
echo -e "\n[✗] FATAL: '/ix' is probably Broken\n"
125+
exit 1
126+
fi
127+
#Install a dummy pkg & Check
128+
ix run "bin/nano" -- nano --version ||\
129+
{
130+
echo -e "\n[✗] FATAL: 'ix' is probably Broken\n" ; exit 1
131+
}
132+
else
133+
echo -e "\n[✗] FATAL: 'ix' is NOT Installed\n"
134+
exit 1
135+
fi
136+
#-------------------------------------------------------#
137+
138+
#-------------------------------------------------------#
139+
##Cleanup
140+
sudo kill -9 "${bg_pid}" 2>/dev/null
141+
if [[ -d "/ix/trash" ]]; then
142+
echo -e "\n[BG] Purging '/ix/trash'\n"
143+
sudo rm -rvf "/ix/trash" &>/dev/null
144+
sudo mkdir -p "/ix/trash"
145+
sudo chown --recursive "root" "/ix/trash" &>/dev/null
146+
fi
147+
##Calc Time
148+
END_TIME="$(date '+%s')"
149+
ELAPSED_TIME="$(date -u -d@"$((END_TIME - START_TIME))" "+%H(Hr):%M(Min):%S(Sec)")"
150+
echo -e "\n[+] Completed Initiating Stal/IX :: ${ELAPSED_TIME}"
151+
echo -e "==> [+] Finished Initiating at :: $(TZ='UTC' date +'%A, %Y-%m-%d (%I:%M:%S %p)') UTC\n"
152+
##Denote Status
153+
echo "INITIALIZED" > "${SYSTMP}/INITIALIZED"
154+
##Disable Debug?
155+
if [[ "${DEBUG}" = "1" ]] || [[ "${DEBUG}" = "ON" ]]; then
156+
set -x
157+
fi
158+
#-------------------------------------------------------#

0 commit comments

Comments
 (0)