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