-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathappimagen
194 lines (161 loc) · 8.13 KB
/
appimagen
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
#!/usr/bin/env bash
VERSION=2.1-3
case "$1" in
-h|--help) echo "
APPIMAGEN $VERSION"
echo '
AN INTERACTIVE SCRIPT THAT GENERATES AN APPIMAGE FROM DEBIAN OR FROM A PPA OF
YOUR CHOICE FOR THE PREVIOUS (NOT THE OLDEST) AND STILL SUPPORTED UBUNTU LTS.
USAGE:
appimagen [package1] [package2] [package3]
EXAMPLES:
appimagen chromium-browser chromium-browser-l10n
appimagen mpv ffmpeg
OPTIONS:
-h/--help Shows this message
-v/--version Shows the version of this script
SITE: https://github.com/ivan-hc/AppImaGen
THIS SCRIPT IS PART OF https://github.com/ivan-hc/AM-APPLICATION-MANAGER
';;
-v|--version) echo "AppImaGen $VERSION";;
*)
APP=$1
# CREATE A TEMPORARY DIRECTORY
mkdir -p tmp;
cd tmp;
# DOWNLOADING THE DEPENDENCIES
if test -f ./appimagetool; then
echo " appimagetool already exists" 1> /dev/null
else
echo " Downloading appimagetool..."
wget -q "$(wget -q https://api.github.com/repos/probonopd/go-appimage/releases -O - | sed 's/"/ /g; s/ /\n/g' | grep -o 'https.*continuous.*tool.*86_64.*mage$')" -O appimagetool
fi
if test -f ./pkg2appimage; then
echo " pkg2appimage already exists" 1> /dev/null
else
echo " Downloading pkg2appimage..."
wget -q https://raw.githubusercontent.com/ivan-hc/AM-application-manager/main/tools/pkg2appimage
fi
chmod a+x ./appimagetool ./pkg2appimage
rm -f ./recipe.yml
# CREATING THE HEAD OF THE RECIPE
echo "app: $APP
binpatch: true
ingredients:" >> recipe.yml
# CHECK THE NAME OF THE PREVIOUS "UBUNTU LTS" STILL SUPPORTED
PREVIOUSLTS=$(wget -q https://releases.ubuntu.com/ -O - | grep class | grep LTS | grep -m2 href | tail -n1 | sed -n 's/.*href="\([^"]*\).*/\1/p' | rev| cut -c 2- | rev)
# CHOOSE BETWEEN UBUNTU AND DEBIAN
read -r -p " WHAT DISTRO YOU CHOOSE BETWEEN DEBIAN (1) AND UBUNTU $PREVIOUSLTS (2)? : " distribution
case "$distribution" in
debian|DEBIAN|Debian|1) read -r -p " WHAT BRANCH OF DEBIAN YOU CHOOSE (stable, testing, oldstable...)?" DEBIANBRANCH
case "$DEBIANBRANCH" in
*) echo -e "\n dist: $DEBIANBRANCH\n sources:\n - deb http://ftp.debian.org/debian/ $DEBIANBRANCH main contrib non-free\n - deb http://security.debian.org/debian-security/ $DEBIANBRANCH-security main contrib non-free\n - deb http://ftp.debian.org/debian/ $DEBIANBRANCH-updates main contrib non-free" >> recipe.yml;;
esac;;
ubuntu|UBUNTU|Ubuntu|2) echo -e "\n dist: $PREVIOUSLTS\n sources:\n - deb http://archive.ubuntu.com/ubuntu/ $PREVIOUSLTS main universe restricted multiverse\n - deb http://archive.ubuntu.com/ubuntu $PREVIOUSLTS-security main universe restricted multiverse\n - deb http://archive.ubuntu.com/ubuntu/ $PREVIOUSLTS-updates main universe restricted multiverse" >> recipe.yml
# IF UBUNTU, CHOOSE A PPA
read -p " DO YOU WISH TO ADD A PPA (y,N)?" yn
case $yn in
'Y'|'y') read -r -p " ADD THE PPA (example 'name/repository') : " ppa
case $ppa in
*) echo -e " ppas:\n - $ppa" >> recipe.yml
esac
while true; do
read -p " DO YOU WISH TO ADD ANOTHER PPA (y,N)?" yn
case $yn in
'Y'|'y') while true; do
read -r -p " ADD THE PPA (example 'name/repository') : " ppa
case $ppa in
*) echo " - $ppa" >> recipe.yml && break
esac
done;;
'N'|'n'|*) break;;
esac
done;;
'N'|'n'|*) break;;
esac
esac
# ADD THE OTHER PACKAGES
echo " packages:
- $1
- $2
- $3
- $4
- $5
- $6
- $7
- $8
- $9" >> recipe.yml
# DOWNLOAD ALL THE NEEDED PACKAGES AND COMPILE THE APPDIR
./pkg2appimage ./recipe.yml
# COMPILE SCHEMAS
glib-compile-schemas ./$APP/$APP.AppDir/usr/share/glib-2.0/schemas/ || echo "No ./usr/share/glib-2.0/schemas/"
# THIS IS THE PART RELATED TO THE APPRUN SCRIPT, I.E. THE ENGINE OF THE APPIMAGE---------------------------------------------------------------
# CUSTOMIZE THE APPRUN (PART 1)
rm -R -f ./$APP/$APP.AppDir/AppRun
cat >> ./$APP/$APP.AppDir/AppRun << 'EOF'
#!/bin/sh
HERE="$(dirname "$(readlink -f "${0}")")"
export UNION_PRELOAD="${HERE}"
EOF
# LIBUNIONPRELOAD
read -p ' Do you wish to add libunionpreload (y,N)?' yn
case $yn in
'Y'|'y') wget https://github.com/project-portable/libunionpreload/releases/download/amd64/libunionpreload.so
chmod a+x libunionpreload.so
mv ./libunionpreload.so ./$APP/$APP.AppDir/
echo 'export LD_PRELOAD="${HERE}"/libunionpreload.so' >> ./$APP/$APP.AppDir/AppRun;;
'N'|'n'|*) echo "Proceeding without libunionpreload";;
esac
# SYSTEM LIBRARIES
read -p ' Do you wish to include system libraries (Y,n)?' yn
case $yn in
'N'|'n') echo 'export LD_LIBRARY_PATH="${HERE}"/usr/lib/:"${HERE}"/usr/lib/i386-linux-gnu/:"${HERE}"/usr/lib/x86_64-linux-gnu/:"${HERE}"/lib/:"${HERE}"/lib/i386-linux-gnu/:"${HERE}"/lib/x86_64-linux-gnu/:"${LD_LIBRARY_PATH}"' >> ./$APP/$APP.AppDir/AppRun;;
'Y'|'y'|*) echo 'export LD_LIBRARY_PATH=/lib/:/lib64/:/lib/x86_64-linux-gnu/:/usr/lib/:"${HERE}"/usr/lib/:"${HERE}"/usr/lib/i386-linux-gnu/:"${HERE}"/usr/lib/x86_64-linux-gnu/:"${HERE}"/lib/:"${HERE}"/lib/i386-linux-gnu/:"${HERE}"/lib/x86_64-linux-gnu/:"${LD_LIBRARY_PATH}"' >> ./$APP/$APP.AppDir/AppRun;;
esac
# CUSTOMIZE THE APPRUN (PART 2)
cat >> ./$APP/$APP.AppDir/AppRun << 'EOF'
export PATH="${HERE}"/usr/bin/:"${HERE}"/usr/sbin/:"${HERE}"/usr/games/:"${HERE}"/bin/:"${HERE}"/sbin/:"${PATH}"
export PYTHONPATH="${HERE}"/usr/share/pyshared/:"${HERE}"/usr/lib/python*/:"${PYTHONPATH}"
export PYTHONHOME="${HERE}"/usr/:"${HERE}"/usr/lib/python*/
export XDG_DATA_DIRS="${HERE}"/usr/share/:"${XDG_DATA_DIRS}"
export PERLLIB="${HERE}"/usr/share/perl5/:"${HERE}"/usr/lib/perl5/:"${PERLLIB}"
export GSETTINGS_SCHEMA_DIR="${HERE}"/usr/share/glib-2.0/schemas/:"${GSETTINGS_SCHEMA_DIR}"
export QT_PLUGIN_PATH="${HERE}"/usr/lib/qt4/plugins/:"${HERE}"/usr/lib/i386-linux-gnu/qt4/plugins/:"${HERE}"/usr/lib/x86_64-linux-gnu/qt4/plugins/:"${HERE}"/usr/lib32/qt4/plugins/:"${HERE}"/usr/lib64/qt4/plugins/:"${HERE}"/usr/lib/qt5/plugins/:"${HERE}"/usr/lib/i386-linux-gnu/qt5/plugins/:"${HERE}"/usr/lib/x86_64-linux-gnu/qt5/plugins/:"${HERE}"/usr/lib32/qt5/plugins/:"${HERE}"/usr/lib64/qt5/plugins/:"${QT_PLUGIN_PATH}"
EXEC=$(grep -e '^Exec=.*' "${HERE}"/*.desktop | head -n 1 | cut -d "=" -f 2- | sed -e 's|%.||g')
EOF
# BINARY PATH
read -p ' Do you wish to specify the binary`s path manually (y,N)?' yn
case $yn in
'Y'|'y') read -r -p " ◆ ADD THE PATH (EXAMPLE '/usr/lib.../$APP'):" RESPONSE
case "$RESPONSE" in
*) echo 'exec "${HERE}"'$RESPONSE' "$@"' >> ./$APP/$APP.AppDir/AppRun;;
esac;;
'N'|'n'|*) echo 'exec ${EXEC} "$@"' >> ./$APP/$APP.AppDir/AppRun;;
esac
# MADE THE APPRUN EXECUTABLE
chmod a+x ./$APP/$APP.AppDir/AppRun
# END OF THE PART RELATED TO THE APPRUN, NOW WE WELL SEE IF EVERYTHING WORKS ----------------------------------------------------------------------
# IMPORT THE LAUNCHER AND THE ICON TO THE APPDIR IF THEY NOT EXIST
if test -f ./$APP/$APP.AppDir/*.desktop; then
echo "The desktop file exists"
else
echo "Trying to get the .desktop file"
cp ./$APP/$APP.AppDir/usr/share/applications/*$(ls . | grep -i $APP | cut -c -4)*desktop ./$APP/$APP.AppDir/ 2>/dev/null
fi
ICONNAME=$(cat ./$APP/$APP.AppDir/*desktop | grep "Icon=" | head -1 | cut -c 6-)
cp ./$APP/$APP.AppDir/usr/share/icons/hicolor/22x22/apps/*$ICONNAME* ./$APP/$APP.AppDir/ 2>/dev/null
cp ./$APP/$APP.AppDir/usr/share/icons/hicolor/24x24/apps/*$ICONNAME* ./$APP/$APP.AppDir/ 2>/dev/null
cp ./$APP/$APP.AppDir/usr/share/icons/hicolor/32x32/apps/*$ICONNAME* ./$APP/$APP.AppDir/ 2>/dev/null
cp ./$APP/$APP.AppDir/usr/share/icons/hicolor/48x48/apps/*$ICONNAME* ./$APP/$APP.AppDir/ 2>/dev/null
cp ./$APP/$APP.AppDir/usr/share/icons/hicolor/64x64/apps/*$ICONNAME* ./$APP/$APP.AppDir/ 2>/dev/null
cp ./$APP/$APP.AppDir/usr/share/icons/hicolor/128x128/apps/*$ICONNAME* ./$APP/$APP.AppDir/ 2>/dev/null
cp ./$APP/$APP.AppDir/usr/share/icons/hicolor/256x256/apps/*$ICONNAME* ./$APP/$APP.AppDir/ 2>/dev/null
cp ./$APP/$APP.AppDir/usr/share/icons/hicolor/512x512/apps/*$ICONNAME* ./$APP/$APP.AppDir/ 2>/dev/null
cp ./$APP/$APP.AppDir/usr/share/icons/hicolor/scalable/apps/*$ICONNAME* ./$APP/$APP.AppDir/ 2>/dev/null
cp ./$APP/$APP.AppDir/usr/share/applications/*$ICONNAME* ./$APP/$APP.AppDir/ 2>/dev/null
# EXPORT THE APP TO AN APPIMAGE
ARCH=x86_64 VERSION=$(./appimagetool -v | grep -o '[[:digit:]]*') ./appimagetool -s ./$APP/$APP.AppDir
cd ..
mv ./tmp/*.AppImage .
chmod a+x *.AppImage;;
esac