-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
sample-junest.sh
235 lines (208 loc) · 11.4 KB
/
sample-junest.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
#!/bin/sh
# NAME OF THE APP BY REPLACING "SAMPLE"
APP=SAMPLE
BIN="$APP" #CHANGE THIS IF THE NAME OF THE BINARY IS DIFFERENT FROM "$APP" (for example, the binary of "obs-studio" is "obs")
DEPENDENCES="" #SYNTAX: "APP1 APP2 APP3 APP4...", LEAVE BLANK IF NO OTHER DEPENDENCES ARE NEEDED
#BASICSTUFF="binutils gzip"
#COMPILERS="gcc"
# ADD A VERSION, THIS IS NEEDED FOR THE NAME OF THE FINEL APPIMAGE, IF NOT AVAILABLE ON THE REPO, THE VALUE COME FROM AUR, AND VICE VERSA
for REPO in { "core" "extra" "community" "multilib" }; do
echo "$(wget -q https://archlinux.org/packages/$REPO/x86_64/$APP/flag/ -O - | grep $APP | grep details | head -1 | grep -o -P '(?<=/a> ).*(?= )' | grep -o '^\S*')" >> version
done
VERSION=$(cat ./version | grep -w -v "" | head -1)
VERSIONAUR=$(wget -q https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=$APP -O - | grep pkgver | head -1 | cut -c 8-)
# CREATE THE APPDIR (DON'T TOUCH THIS)...
wget -q https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage -O appimagetool
chmod a+x appimagetool
mkdir $APP.AppDir
# ENTER THE APPDIR
cd $APP.AppDir
# SET APPDIR AS A TEMPORARY $HOME DIRECTORY, THIS WILL DO ALL WORK INTO THE APPDIR
HOME="$(dirname "$(readlink -f $0)")"
# DOWNLOAD AND INSTALL JUNEST (DON'T TOUCH THIS)
git clone https://github.com/fsquillace/junest.git ~/.local/share/junest
./.local/share/junest/bin/junest setup
# ENABLE MULTILIB (optional)
echo "
[multilib]
Include = /etc/pacman.d/mirrorlist" >> ./.junest/etc/pacman.conf
# ENABLE CHAOTIC-AUR
###./.local/share/junest/bin/junest -- sudo pacman-key --recv-key 3056513887B78AEB --keyserver keyserver.ubuntu.com
###./.local/share/junest/bin/junest -- sudo pacman-key --lsign-key 3056513887B78AEB
###./.local/share/junest/bin/junest -- sudo pacman --noconfirm -U 'https://cdn-mirror.chaotic.cx/chaotic-aur/chaotic-keyring.pkg.tar.zst' 'https://cdn-mirror.chaotic.cx/chaotic-aur/chaotic-mirrorlist.pkg.tar.zst'
###echo "
###[chaotic-aur]
###Include = /etc/pacman.d/chaotic-mirrorlist" >> ./.junest/etc/pacman.conf
# CUSTOM MIRRORLIST, THIS SHOULD SPEEDUP THE INSTALLATION OF THE PACKAGES IN PACMAN (COMMENT EVERYTHING TO USE THE DEFAULT MIRROR)
COUNTRY=$(curl -i ipinfo.io | grep country | cut -c 15- | cut -c -2)
rm -R ./.junest/etc/pacman.d/mirrorlist
wget -q https://archlinux.org/mirrorlist/?country="$(echo $COUNTRY)" -O - | sed 's/#Server/Server/g' >> ./.junest/etc/pacman.d/mirrorlist
# UPDATE ARCH LINUX IN JUNEST
./.local/share/junest/bin/junest -- sudo pacman -Syy
./.local/share/junest/bin/junest -- sudo pacman --noconfirm -Syu
# INSTALL THE PROGRAM USING YAY
./.local/share/junest/bin/junest -- yay -Syy
./.local/share/junest/bin/junest -- yay --noconfirm -S gnu-free-fonts $(echo "$BASICSTUFF $COMPILERS $DEPENDENCES $APP")
# SET THE LOCALE (DON'T TOUCH THIS)
#sed "s/# /#>/g" ./.junest/etc/locale.gen | sed "s/#//g" | sed "s/>/#/g" >> ./locale.gen # UNCOMMENT TO ENABLE ALL THE LANGUAGES
#sed "s/#$(echo $LANG)/$(echo $LANG)/g" ./.junest/etc/locale.gen >> ./locale.gen # ENABLE ONLY YOUR LANGUAGE, COMMENT IF YOU NEED MORE THAN ONE
#rm ./.junest/etc/locale.gen
#mv ./locale.gen ./.junest/etc/locale.gen
rm ./.junest/etc/locale.conf
#echo "LANG=$LANG" >> ./.junest/etc/locale.conf
sed -i 's/LANG=${LANG:-C}/LANG=$LANG/g' ./.junest/etc/profile.d/locale.sh
#./.local/share/junest/bin/junest -- sudo pacman --noconfirm -S glibc gzip
#./.local/share/junest/bin/junest -- sudo locale-gen
# ...ADD THE ICON AND THE DESKTOP FILE AT THE ROOT OF THE APPDIR...
rm -R -f ./*.desktop
LAUNCHER=$(grep -iRl $BIN ./.junest/usr/share/applications/* | grep ".desktop" | head -1)
cp -r "$LAUNCHER" ./
ICON=$(cat $LAUNCHER | grep "Icon=" | cut -c 6-)
cp -r ./.junest/usr/share/icons/hicolor/22x22/apps/*$ICON* ./ 2>/dev/null
cp -r ./.junest/usr/share/icons/hicolor/24x24/apps/*$ICON* ./ 2>/dev/null
cp -r ./.junest/usr/share/icons/hicolor/32x32/apps/*$ICON* ./ 2>/dev/null
cp -r ./.junest/usr/share/icons/hicolor/48x48/apps/*$ICON* ./ 2>/dev/null
cp -r ./.junest/usr/share/icons/hicolor/64x64/apps/*$ICON* ./ 2>/dev/null
cp -r ./.junest/usr/share/icons/hicolor/128x128/apps/*$ICON* ./ 2>/dev/null
cp -r ./.junest/usr/share/icons/hicolor/192x192/apps/*$ICON* ./ 2>/dev/null
cp -r ./.junest/usr/share/icons/hicolor/256x256/apps/*$ICON* ./ 2>/dev/null
cp -r ./.junest/usr/share/icons/hicolor/512x512/apps/*$ICON* ./ 2>/dev/null
cp -r ./.junest/usr/share/icons/hicolor/scalable/apps/*$ICON* ./ 2>/dev/null
cp -r ./.junest/usr/share/pixmaps/*$ICON* ./ 2>/dev/null
# TEST IF THE DESKTOP FILE AND THE ICON ARE IN THE ROOT OF THE FUTURE APPIMAGE (./*AppDir/*)
if test -f ./*.desktop; then
echo "The .desktop file is available in $APP.AppDir/"
else
cat <<-HEREDOC >> "./$APP.desktop"
[Desktop Entry]
Version=1.0
Type=Application
Name=NAME
Comment=
Exec=BINARY
Icon=tux
Categories=Utility;
Terminal=true
StartupNotify=true
HEREDOC
sed -i "s#BINARY#$BIN#g" ./$APP.desktop
sed -i "s#Name=NAME#Name=$(echo $APP | tr a-z A-Z)#g" ./$APP.desktop
wget https://raw.githubusercontent.com/Portable-Linux-Apps/Portable-Linux-Apps.github.io/main/favicon.ico -O ./tux.png
fi
# ...AND FINALLY CREATE THE APPRUN, IE THE MAIN SCRIPT TO RUN THE APPIMAGE!
# EDIT THE FOLLOWING LINES IF YOU THINK SOME ENVIRONMENT VARIABLES ARE MISSING
rm -R -f ./AppRun
cat >> ./AppRun << 'EOF'
#!/bin/sh
HERE="$(dirname "$(readlink -f $0)")"
export UNION_PRELOAD=$HERE
export JUNEST_HOME=$HERE/.junest
export PATH=$HERE/.local/share/junest/bin/:$PATH
mkdir -p $HOME/.cache
EXEC=$(grep -e '^Exec=.*' "${HERE}"/*.desktop | head -n 1 | cut -d "=" -f 2- | sed -e 's|%.||g')
$HERE/.local/share/junest/bin/junest proot -n -b "--bind=/home --bind=/home/$(echo $USER) --bind=/media --bind=/mnt --bind=/opt --bind=/usr/lib/locale --bind=/etc/fonts --bind=/usr/share/fonts --bind=/usr/share/themes" 2> /dev/null -- $EXEC "$@"
EOF
chmod a+x ./AppRun
# REMOVE "READ-ONLY FILE SYSTEM" ERRORS
sed -i 's#${JUNEST_HOME}/usr/bin/junest_wrapper#${HOME}/.cache/junest_wrapper.old#g' ./.local/share/junest/lib/core/wrappers.sh
sed -i 's/rm -f "${JUNEST_HOME}${bin_path}_wrappers/#rm -f "${JUNEST_HOME}${bin_path}_wrappers/g' ./.local/share/junest/lib/core/wrappers.sh
sed -i 's/ln/#ln/g' ./.local/share/junest/lib/core/wrappers.sh
# EXIT THE APPDIR
cd ..
# REMOVE SOME BLOATWARES
find ./$APP.AppDir/.junest/usr/share/doc/* -not -iname "*$BIN*" -a -not -name "." -delete #REMOVE ALL DOCUMENTATION NOT RELATED TO THE APP
find ./$APP.AppDir/.junest/usr/share/locale/*/*/* -not -iname "*$BIN*" -a -not -name "." -delete #REMOVE ALL ADDITIONAL LOCALE FILES
rm -R -f ./$APP.AppDir/.junest/etc/makepkg.conf
rm -R -f ./$APP.AppDir/.junest/etc/pacman.conf
rm -R -f ./$APP.AppDir/.junest/usr/include #FILES RELATED TO THE COMPILER
rm -R -f ./$APP.AppDir/.junest/usr/man #APPIMAGES ARE NOT MENT TO HAVE MAN COMMAND
rm -R -f ./$APP.AppDir/.junest/var/* #REMOVE ALL PACKAGES DOWNLOADED WITH THE PACKAGE MANAGER
# IN THE NEXT 4 STEPS WE WILL TRY TO LIGHTEN THE FINAL APPIMAGE PACKAGE
# WE WILL MOVE EXCESS CONTENT TO BACKUP FOLDERS (STEP 1)
# THE AFFECTED DIRECTORIES WILL BE /usr/bin (STEP 2), /usr/lib (STEP 3) AND /usr/share (STEP 4)
# STEP 1, CREATE A BACKUP FOLDER WHERE TO SAVE THE FILES TO BE DISCARDED (USEFUL FOR TESTING PURPOSES)
mkdir -p ./junest-backups/usr/bin
mkdir -p ./junest-backups/usr/lib/dri
mkdir -p ./junest-backups/usr/share
# STEP 2, FUNCTION TO SAVE THE BINARIES IN /usr/bin THAT ARE NEEDED TO MADE JUNEST WORK, PLUS THE MAIN BINARY/BINARIES OF THE APP
# IF YOU NEED TO SAVE MORE BINARIES, LIST THEM IN THE "BINSAVED" VARIABLE. COMMENT THE LINE "_savebins" IF YOU ARE NOT SURE.
_savebins(){
BINSAVED="SAVEBINSPLEASE"
mkdir save
mv ./$APP.AppDir/.junest/usr/bin/*$BIN* ./save/
mv ./$APP.AppDir/.junest/usr/bin/bash ./save/
mv ./$APP.AppDir/.junest/usr/bin/env ./save/
mv ./$APP.AppDir/.junest/usr/bin/proot* ./save/
mv ./$APP.AppDir/.junest/usr/bin/sh ./save/
for arg in $BINSAVED; do
for var in $arg; do
mv ./$APP.AppDir/.junest/usr/bin/*"$arg"* ./save/
done
done
mv ./$APP.AppDir/.junest/usr/bin/* ./junest-backups/usr/bin/
mv ./save/* ./$APP.AppDir/.junest/usr/bin/
rmdir save
}
#_savebins
# STEP 3, MOVE UNNECESSARY LIBRARIES TO A BACKUP FOLDER (FOR TESTING PURPOSES)
mv ./$APP.AppDir/.junest/usr/lib32 ./junest-backups/usr/
mv ./$APP.AppDir/.junest/usr/lib/*.a ./junest-backups/usr/lib/
mv ./$APP.AppDir/.junest/usr/lib/bfd-plugins/liblto_plugin.so ./junest-backups/usr/lib/
mv ./$APP.AppDir/.junest/usr/lib/dri/crocus_dri.so ./junest-backups/usr/lib/dri/
mv ./$APP.AppDir/.junest/usr/lib/dri/d3d12_dri.so ./junest-backups/usr/lib/dri/
mv ./$APP.AppDir/.junest/usr/lib/dri/i* ./junest-backups/usr/lib/dri/
mv ./$APP.AppDir/.junest/usr/lib/dri/kms_swrast_dri.so ./junest-backups/usr/lib/dri/
mv ./$APP.AppDir/.junest/usr/lib/dri/r* ./junest-backups/usr/lib/dri/
mv ./$APP.AppDir/.junest/usr/lib/dri/nouveau_dri.so ./junest-backups/usr/lib/dri/
mv ./$APP.AppDir/.junest/usr/lib/dri/radeonsi_dri.so ./junest-backups/usr/lib/dri/
mv ./$APP.AppDir/.junest/usr/lib/dri/virtio_gpu_dri.so ./junest-backups/usr/lib/dri/
mv ./$APP.AppDir/.junest/usr/lib/dri/vmwgfx_dri.so ./junest-backups/usr/lib/dri/
mv ./$APP.AppDir/.junest/usr/lib/dri/zink_dri.so ./junest-backups/usr/lib/dri/
mv ./$APP.AppDir/.junest/usr/lib/gcc ./junest-backups/usr/lib/
mv ./$APP.AppDir/.junest/usr/lib/git-* ./junest-backups/usr/lib/
mv ./$APP.AppDir/.junest/usr/lib/libalpm.so* ./junest-backups/usr/lib/
mv ./$APP.AppDir/.junest/usr/lib/libasan_preinit.o ./junest-backups/usr/lib/
mv ./$APP.AppDir/.junest/usr/lib/libcc* ./junest-backups/usr/lib/
mv ./$APP.AppDir/.junest/usr/lib/libgomp.spec ./junest-backups/usr/lib/
mv ./$APP.AppDir/.junest/usr/lib/libitm.spec ./junest-backups/usr/lib/
mv ./$APP.AppDir/.junest/usr/lib/liblsan_preinit.o ./junest-backups/usr/lib/
mv ./$APP.AppDir/.junest/usr/lib/libsanitizer.spec ./junest-backups/usr/lib/
#mv ./$APP.AppDir/.junest/usr/lib/libstdc++* ./junest-backups/usr/lib/
mv ./$APP.AppDir/.junest/usr/lib/libtsan_preinit.o ./junest-backups/usr/lib/
mv ./$APP.AppDir/.junest/usr/lib/*.o ./junest-backups/usr/lib/
mv ./$APP.AppDir/.junest/usr/lib/pkgconfig ./junest-backups/usr/lib/
mv ./$APP.AppDir/.junest/usr/lib/systemd/system/[email protected] ./junest-backups/usr/lib/
mv ./$APP.AppDir/.junest/usr/lib/systemd/system/git-daemon.socket ./junest-backups/usr/lib/
mv ./$APP.AppDir/.junest/usr/lib/sysusers.d/git.conf ./junest-backups/usr/lib/
# STEP 4, SAVE ONLY SOME DIRECTORIES CONTAINED IN /usr/share
# IF YOU NEED TO SAVE MORE FOLDERS, LIST THEM IN THE "SHARESAVED" VARIABLE. COMMENT THE LINE "_saveshare" IF YOU ARE NOT SURE.
_saveshare(){
SHARESAVED="SAVESHAREPLEASE"
mkdir save
mv ./$APP.AppDir/.junest/usr/share/*$APP* ./save/
mv ./$APP.AppDir/.junest/usr/share/*$BIN* ./save/
mv ./$APP.AppDir/.junest/usr/share/fontconfig ./save/
mv ./$APP.AppDir/.junest/usr/share/glib-* ./save/
mv ./$APP.AppDir/.junest/usr/share/locale ./save/
mv ./$APP.AppDir/.junest/usr/share/mime ./save/
mv ./$APP.AppDir/.junest/usr/share/wayland ./save/
mv ./$APP.AppDir/.junest/usr/share/X11 ./save/
for arg in $SHARESAVED; do
for var in $arg; do
mv ./$APP.AppDir/.junest/usr/share/*"$arg"* ./save/
done
done
mv ./$APP.AppDir/.junest/usr/share/* ./junest-backups/usr/share/
mv ./save/* ./$APP.AppDir/.junest/usr/share/
rmdir save
}
#_saveshare
# ADDITIONAL REMOVALS
# REMOVE THE INBUILT HOME
rm -R -f ./$APP.AppDir/.junest/home
# ENABLE MOUNTPOINTS
mkdir -p ./$APP.AppDir/.junest/home
mkdir -p ./$APP.AppDir/.junest/media
# CREATE THE APPIMAGE
ARCH=x86_64 ./appimagetool -n ./$APP.AppDir
mv ./*AppImage ./"$(cat ./$APP.AppDir/*.desktop | grep 'Name=' | head -1 | cut -c 6- | sed 's/ /-/g')"_"$VERSION""$VERSIONAUR"-x86_64.AppImage