probonopd / go-appimage Goto Github PK
View Code? Open in Web Editor NEWGo implementation of AppImage tools
License: MIT License
Go implementation of AppImage tools
License: MIT License
Use a Go implementation of squashfs? E.g., distr1/distri#48
Caused by golang/go#36032?
Example for a package that does this:
https://packages.debian.org/sid/amd64/geoclue-2.0/filelist
Looking for a Pure Go implementation for calculating ELF sizes. Asked in https://forum.golangbridge.org/t/calculate-the-size-of-an-elf/16064
Solution: Deepin Linux should be configured to allow unprivileged namespaces:
https://docs.appimage.org/user-guide/troubleshooting.html#i-have-issues-with-electron-based-appimages-and-their-sandboxing
Please create a file /etc/sysctl.d/00-local-userns.conf
with the following content:
echo kernel.unprivileged_userns_clone = 1
Then, Electron-based AppImages should work.
rm -rf appdir || true
mkdir -p appdir/usr/bin
mkdir -p appdir/usr/share/applications
mkdir -p appdir/usr/share/icons
cp /usr/bin/kcalc appdir/usr/bin/
cp /usr/share/applications/org.kde.kcalc.desktop appdir/usr/share/applications/
mkdir -p appdir/usr/share/icons/hicolor/scalable/applications
cp /usr/share/icons/Humanity/apps/48/kcalc.svg appdir/usr/share/icons/hicolor/scalable/applications/
Downloads/appimagetool-492-x86_64.AppImage deploy appdir/usr/share/applications/org.kde.kcalc.desktop
If one changes the last line to use -s
, then it works:
Downloads/appimagetool-492-x86_64.AppImage deploy appdir/usr/share/applications/org.kde.kcalc.desktop
Proably the culprit is something in here:
2020/07/30 17:06:59 Patching qt_prfxpath, otherwise can't load platform plugin...
2020/07/30 17:06:59 Offset of qt_prfxpath: 3561388
2020/07/30 17:06:59 Qt prefix directory in the AppDir: appdir/usr/lib/x86_64-linux-gnu/qt5
2020/07/30 17:06:59 Relative path from ld-linux to Qt prefix directory in the AppDir: ../usr/lib/x86_64-linux-gnu/qt5
The "Relative path from ld-linux to Qt prefix directory in the AppDir" should only matter if -s
is used. Why is it even running when it is not used?
E.g., something roughly along the lines of
Source:
https://twitter.com/DanielFore/status/1268966492487299077
But it would need to go here:
This AppImage by @azubieta is known to run on debian-stable, ubuntu-xenial, fedora-33 and archlinux latest and has GPU acceleration working.
me@host:~$ Downloads/glmark2-latest-x86_64.AppImage --appimage-extract
squashfs-root/.DirIcon
squashfs-root/.bundle.yml
squashfs-root/.env
squashfs-root/AppRun
squashfs-root/application-x-executable.svg
squashfs-root/glmark2.desktop
squashfs-root/opt
squashfs-root/opt/libc
squashfs-root/opt/libc/etc
squashfs-root/opt/libc/etc/ld.so.conf.d
squashfs-root/opt/libc/etc/ld.so.conf.d/x86_64-linux-gnu.conf
squashfs-root/opt/libc/lib
squashfs-root/opt/libc/lib/x86_64-linux-gnu
squashfs-root/opt/libc/lib/x86_64-linux-gnu/ld-2.27.so
squashfs-root/opt/libc/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libBrokenLocale-2.27.so
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libBrokenLocale.so.1
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libSegFault.so
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libanl-2.27.so
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libanl.so.1
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libc-2.27.so
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libc.so.6
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libcidn-2.27.so
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libcidn.so.1
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libcrypt-2.27.so
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libcrypt.so.1
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libdl-2.27.so
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libdl.so.2
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libgcc_s.so.1
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libm-2.27.so
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libm.so.6
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libmemusage.so
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libmvec-2.27.so
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libmvec.so.1
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libnsl-2.27.so
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libnsl.so.1
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libnss_compat-2.27.so
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libnss_compat.so.2
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libnss_dns-2.27.so
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libnss_dns.so.2
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libnss_files-2.27.so
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libnss_files.so.2
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libnss_hesiod-2.27.so
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libnss_hesiod.so.2
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libnss_nis-2.27.so
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libnss_nis.so.2
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libnss_nisplus-2.27.so
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libnss_nisplus.so.2
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libpcprofile.so
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libpthread-2.27.so
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libpthread.so.0
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libresolv-2.27.so
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libresolv.so.2
squashfs-root/opt/libc/lib/x86_64-linux-gnu/librt-2.27.so
squashfs-root/opt/libc/lib/x86_64-linux-gnu/librt.so.1
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libthread_db-1.0.so
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libthread_db.so.1
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libutil-2.27.so
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libutil.so.1
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libz.so.1
squashfs-root/opt/libc/lib/x86_64-linux-gnu/libz.so.1.2.11
squashfs-root/opt/libc/lib64
squashfs-root/opt/libc/lib64/ld-linux-x86-64.so.2
squashfs-root/opt/libc/usr
squashfs-root/opt/libc/usr/lib
squashfs-root/opt/libc/usr/lib/gcc
squashfs-root/opt/libc/usr/lib/gcc/x86_64-linux-gnu
squashfs-root/opt/libc/usr/lib/gcc/x86_64-linux-gnu/8
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/audit
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/audit/sotruss-lib.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ANSI_X3.110.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ARMSCII-8.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ASMO_449.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/BIG5.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/BIG5HKSCS.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/BRF.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/CP10007.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/CP1125.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/CP1250.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/CP1251.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/CP1252.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/CP1253.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/CP1254.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/CP1255.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/CP1256.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/CP1257.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/CP1258.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/CP737.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/CP770.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/CP771.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/CP772.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/CP773.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/CP774.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/CP775.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/CP932.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/CSN_369103.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/CWI.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/DEC-MCS.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/EBCDIC-AT-DE-A.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/EBCDIC-AT-DE.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/EBCDIC-CA-FR.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/EBCDIC-DK-NO-A.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/EBCDIC-DK-NO.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/EBCDIC-ES-A.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/EBCDIC-ES-S.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/EBCDIC-ES.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/EBCDIC-FI-SE-A.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/EBCDIC-FI-SE.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/EBCDIC-FR.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/EBCDIC-IS-FRISS.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/EBCDIC-IT.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/EBCDIC-PT.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/EBCDIC-UK.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/EBCDIC-US.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ECMA-CYRILLIC.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/EUC-CN.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/EUC-JISX0213.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/EUC-JP-MS.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/EUC-JP.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/EUC-KR.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/EUC-TW.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/GB18030.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/GBBIG5.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/GBGBK.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/GBK.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/GEORGIAN-ACADEMY.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/GEORGIAN-PS.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/GOST_19768-74.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/GREEK-CCITT.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/GREEK7-OLD.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/GREEK7.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/HP-GREEK8.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/HP-ROMAN8.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/HP-ROMAN9.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/HP-THAI8.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/HP-TURKISH8.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM037.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM038.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1004.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1008.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1008_420.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1025.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1026.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1046.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1047.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1097.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1112.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1122.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1123.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1124.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1129.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1130.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1132.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1133.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1137.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1140.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1141.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1142.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1143.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1144.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1145.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1146.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1147.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1148.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1149.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1153.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1154.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1155.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1156.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1157.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1158.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1160.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1161.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1162.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1163.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1164.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1166.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1167.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM12712.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1364.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1371.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1388.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1390.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM1399.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM16804.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM256.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM273.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM274.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM275.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM277.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM278.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM280.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM281.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM284.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM285.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM290.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM297.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM420.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM423.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM424.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM437.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM4517.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM4899.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM4909.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM4971.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM500.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM5347.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM803.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM850.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM851.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM852.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM855.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM856.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM857.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM858.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM860.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM861.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM862.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM863.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM864.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM865.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM866.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM866NAV.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM868.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM869.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM870.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM871.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM874.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM875.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM880.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM891.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM901.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM902.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM903.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM9030.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM904.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM905.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM9066.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM918.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM921.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM922.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM930.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM932.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM933.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM935.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM937.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM939.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM943.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IBM9448.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/IEC_P27-1.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/INIS-8.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/INIS-CYRILLIC.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/INIS.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISIRI-3342.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO-2022-CN-EXT.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO-2022-CN.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO-2022-JP-3.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO-2022-JP.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO-2022-KR.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO-IR-197.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO-IR-209.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO646.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO8859-1.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO8859-10.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO8859-11.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO8859-13.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO8859-14.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO8859-15.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO8859-16.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO8859-2.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO8859-3.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO8859-4.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO8859-5.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO8859-6.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO8859-7.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO8859-8.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO8859-9.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO8859-9E.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO_10367-BOX.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO_11548-1.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO_2033.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO_5427-EXT.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO_5427.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO_5428.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO_6937-2.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/ISO_6937.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/JOHAB.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/KOI-8.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/KOI8-R.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/KOI8-RU.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/KOI8-T.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/KOI8-U.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/LATIN-GREEK-1.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/LATIN-GREEK.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/MAC-CENTRALEUROPE.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/MAC-IS.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/MAC-SAMI.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/MAC-UK.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/MACINTOSH.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/MIK.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/NATS-DANO.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/NATS-SEFI.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/PT154.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/RK1048.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/SAMI-WS2.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/SHIFT_JISX0213.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/SJIS.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/T.61.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/TCVN5712-1.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/TIS-620.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/TSCII.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/UHC.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/UNICODE.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/UTF-16.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/UTF-32.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/UTF-7.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/VISCII.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/gconv-modules
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/libCNS.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/libGB.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/libISOIR165.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/libJIS.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/libJISX0213.so
squashfs-root/opt/libc/usr/lib/x86_64-linux-gnu/gconv/libKSC.so
squashfs-root/opt/libc/usr/share
squashfs-root/opt/libc/usr/share/doc
squashfs-root/opt/libc/usr/share/doc/gcc-8-base
squashfs-root/opt/libc/usr/share/doc/gcc-8-base/README.Debian.amd64.gz
squashfs-root/opt/libc/usr/share/doc/gcc-8-base/TODO.Debian
squashfs-root/opt/libc/usr/share/doc/gcc-8-base/changelog.Debian.gz
squashfs-root/opt/libc/usr/share/doc/gcc-8-base/copyright
squashfs-root/opt/libc/usr/share/doc/libc6
squashfs-root/opt/libc/usr/share/doc/libc6/NEWS.Debian.gz
squashfs-root/opt/libc/usr/share/doc/libc6/NEWS.gz
squashfs-root/opt/libc/usr/share/doc/libc6/README.Debian.gz
squashfs-root/opt/libc/usr/share/doc/libc6/README.hesiod.gz
squashfs-root/opt/libc/usr/share/doc/libc6/changelog.Debian.gz
squashfs-root/opt/libc/usr/share/doc/libc6/copyright
squashfs-root/opt/libc/usr/share/doc/libgcc1
squashfs-root/opt/libc/usr/share/doc/zlib1g
squashfs-root/opt/libc/usr/share/doc/zlib1g/changelog.Debian.gz
squashfs-root/opt/libc/usr/share/doc/zlib1g/copyright
squashfs-root/opt/libc/usr/share/lintian
squashfs-root/opt/libc/usr/share/lintian/overrides
squashfs-root/opt/libc/usr/share/lintian/overrides/libc6
squashfs-root/opt/libc/usr/share/lintian/overrides/libgcc1
squashfs-root/usr
squashfs-root/usr/bin
squashfs-root/usr/bin/glmark2
squashfs-root/usr/bin/glmark2-drm
squashfs-root/usr/bin/glmark2-es2
squashfs-root/usr/bin/glmark2-es2-drm
squashfs-root/usr/lib
squashfs-root/usr/lib/x86_64-linux-gnu
squashfs-root/usr/lib/x86_64-linux-gnu/libapprun_hooks.so
squashfs-root/usr/lib/x86_64-linux-gnu/libjpeg.so.62
squashfs-root/usr/lib/x86_64-linux-gnu/libjpeg.so.62.0.0
squashfs-root/usr/lib/x86_64-linux-gnu/libpng16.so.16
squashfs-root/usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0
squashfs-root/usr/share
squashfs-root/usr/share/doc
squashfs-root/usr/share/doc/libjpeg62
squashfs-root/usr/share/doc/libjpeg62/README.6b2
squashfs-root/usr/share/doc/libjpeg62/README.gz
squashfs-root/usr/share/doc/libjpeg62/changelog.Debian.gz
squashfs-root/usr/share/doc/libjpeg62/copyright
squashfs-root/usr/share/doc/libpng16-16
squashfs-root/usr/share/doc/libpng16-16/ANNOUNCE
squashfs-root/usr/share/doc/libpng16-16/README.gz
squashfs-root/usr/share/doc/libpng16-16/TODO
squashfs-root/usr/share/doc/libpng16-16/changelog.Debian.gz
squashfs-root/usr/share/doc/libpng16-16/copyright
squashfs-root/usr/share/doc/libpng16-16/libpng-manual.txt.gz
squashfs-root/usr/share/doc-base
squashfs-root/usr/share/doc-base/libpng16
squashfs-root/usr/share/glmark2
squashfs-root/usr/share/glmark2/models
squashfs-root/usr/share/glmark2/models/asteroid-high.3ds
squashfs-root/usr/share/glmark2/models/asteroid-low.3ds
squashfs-root/usr/share/glmark2/models/bunny.obj
squashfs-root/usr/share/glmark2/models/cat.3ds
squashfs-root/usr/share/glmark2/models/cube.3ds
squashfs-root/usr/share/glmark2/models/horse.3ds
squashfs-root/usr/share/glmark2/models/jellyfish.jobj
squashfs-root/usr/share/glmark2/shaders
squashfs-root/usr/share/glmark2/shaders/README.shaders
squashfs-root/usr/share/glmark2/shaders/buffer-wireframe.frag
squashfs-root/usr/share/glmark2/shaders/buffer-wireframe.vert
squashfs-root/usr/share/glmark2/shaders/bump-height.frag
squashfs-root/usr/share/glmark2/shaders/bump-height.vert
squashfs-root/usr/share/glmark2/shaders/bump-normals-tangent.frag
squashfs-root/usr/share/glmark2/shaders/bump-normals-tangent.vert
squashfs-root/usr/share/glmark2/shaders/bump-normals.frag
squashfs-root/usr/share/glmark2/shaders/bump-normals.vert
squashfs-root/usr/share/glmark2/shaders/bump-poly.frag
squashfs-root/usr/share/glmark2/shaders/bump-poly.vert
squashfs-root/usr/share/glmark2/shaders/conditionals-step-conditional.all
squashfs-root/usr/share/glmark2/shaders/conditionals-step-simple.all
squashfs-root/usr/share/glmark2/shaders/conditionals.frag
squashfs-root/usr/share/glmark2/shaders/conditionals.vert
squashfs-root/usr/share/glmark2/shaders/depth.frag
squashfs-root/usr/share/glmark2/shaders/depth.vert
squashfs-root/usr/share/glmark2/shaders/desktop-blur.frag
squashfs-root/usr/share/glmark2/shaders/desktop.frag
squashfs-root/usr/share/glmark2/shaders/desktop.vert
squashfs-root/usr/share/glmark2/shaders/effect-2d-convolution.frag
squashfs-root/usr/share/glmark2/shaders/effect-2d.vert
squashfs-root/usr/share/glmark2/shaders/function-call.all
squashfs-root/usr/share/glmark2/shaders/function-step-low.all
squashfs-root/usr/share/glmark2/shaders/function-step-medium.all
squashfs-root/usr/share/glmark2/shaders/function.frag
squashfs-root/usr/share/glmark2/shaders/function.vert
squashfs-root/usr/share/glmark2/shaders/gradient.frag
squashfs-root/usr/share/glmark2/shaders/gradient.vert
squashfs-root/usr/share/glmark2/shaders/ideas-lamp-lit.frag
squashfs-root/usr/share/glmark2/shaders/ideas-lamp-lit.vert
squashfs-root/usr/share/glmark2/shaders/ideas-lamp-unlit.frag
squashfs-root/usr/share/glmark2/shaders/ideas-lamp-unlit.vert
squashfs-root/usr/share/glmark2/shaders/ideas-logo-flat.frag
squashfs-root/usr/share/glmark2/shaders/ideas-logo-flat.vert
squashfs-root/usr/share/glmark2/shaders/ideas-logo-shadow.frag
squashfs-root/usr/share/glmark2/shaders/ideas-logo-shadow.vert
squashfs-root/usr/share/glmark2/shaders/ideas-logo.frag
squashfs-root/usr/share/glmark2/shaders/ideas-logo.vert
squashfs-root/usr/share/glmark2/shaders/ideas-paper.frag
squashfs-root/usr/share/glmark2/shaders/ideas-paper.vert
squashfs-root/usr/share/glmark2/shaders/ideas-table.frag
squashfs-root/usr/share/glmark2/shaders/ideas-table.vert
squashfs-root/usr/share/glmark2/shaders/ideas-text.frag
squashfs-root/usr/share/glmark2/shaders/ideas-text.vert
squashfs-root/usr/share/glmark2/shaders/ideas-under-table.frag
squashfs-root/usr/share/glmark2/shaders/ideas-under-table.vert
squashfs-root/usr/share/glmark2/shaders/jellyfish.frag
squashfs-root/usr/share/glmark2/shaders/jellyfish.vert
squashfs-root/usr/share/glmark2/shaders/light-advanced.frag
squashfs-root/usr/share/glmark2/shaders/light-advanced.vert
squashfs-root/usr/share/glmark2/shaders/light-basic-tex-bilinear.frag
squashfs-root/usr/share/glmark2/shaders/light-basic-tex.frag
squashfs-root/usr/share/glmark2/shaders/light-basic-texgen.vert
squashfs-root/usr/share/glmark2/shaders/light-basic.frag
squashfs-root/usr/share/glmark2/shaders/light-basic.vert
squashfs-root/usr/share/glmark2/shaders/light-cel.frag
squashfs-root/usr/share/glmark2/shaders/light-phong.frag
squashfs-root/usr/share/glmark2/shaders/light-phong.vert
squashfs-root/usr/share/glmark2/shaders/light-refract.frag
squashfs-root/usr/share/glmark2/shaders/light-refract.vert
squashfs-root/usr/share/glmark2/shaders/loop-step-loop.all
squashfs-root/usr/share/glmark2/shaders/loop-step-simple.all
squashfs-root/usr/share/glmark2/shaders/loop.frag
squashfs-root/usr/share/glmark2/shaders/loop.vert
squashfs-root/usr/share/glmark2/shaders/pulsar-light.vert
squashfs-root/usr/share/glmark2/shaders/pulsar.vert
squashfs-root/usr/share/glmark2/shaders/shadow.frag
squashfs-root/usr/share/glmark2/shaders/shadow.vert
squashfs-root/usr/share/glmark2/shaders/terrain-blur.frag
squashfs-root/usr/share/glmark2/shaders/terrain-luminance.frag
squashfs-root/usr/share/glmark2/shaders/terrain-noise.frag
squashfs-root/usr/share/glmark2/shaders/terrain-normalmap.frag
squashfs-root/usr/share/glmark2/shaders/terrain-overlay.frag
squashfs-root/usr/share/glmark2/shaders/terrain-texture.vert
squashfs-root/usr/share/glmark2/shaders/terrain.frag
squashfs-root/usr/share/glmark2/shaders/terrain.vert
squashfs-root/usr/share/glmark2/shaders/text-renderer.frag
squashfs-root/usr/share/glmark2/shaders/text-renderer.vert
squashfs-root/usr/share/glmark2/textures
squashfs-root/usr/share/glmark2/textures/asteroid-height-map.png
squashfs-root/usr/share/glmark2/textures/asteroid-normal-map-tangent.png
squashfs-root/usr/share/glmark2/textures/asteroid-normal-map.png
squashfs-root/usr/share/glmark2/textures/crate-base.png
squashfs-root/usr/share/glmark2/textures/desktop-shadow-corner.png
squashfs-root/usr/share/glmark2/textures/desktop-shadow.png
squashfs-root/usr/share/glmark2/textures/desktop-window.png
squashfs-root/usr/share/glmark2/textures/effect-2d.png
squashfs-root/usr/share/glmark2/textures/glyph-atlas.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-01.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-02.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-03.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-04.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-05.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-06.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-07.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-08.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-09.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-10.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-11.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-12.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-13.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-14.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-15.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-16.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-17.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-18.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-19.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-20.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-21.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-22.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-23.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-24.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-25.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-26.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-27.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-28.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-29.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-30.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-31.png
squashfs-root/usr/share/glmark2/textures/jellyfish-caustics-32.png
squashfs-root/usr/share/glmark2/textures/jellyfish256.png
squashfs-root/usr/share/glmark2/textures/nasa1.png
squashfs-root/usr/share/glmark2/textures/nasa2.png
squashfs-root/usr/share/glmark2/textures/nasa3.png
squashfs-root/usr/share/glmark2/textures/terrain-backgrounddetailed6.jpg
squashfs-root/usr/share/glmark2/textures/terrain-grasslight-512-nm.jpg
squashfs-root/usr/share/glmark2/textures/terrain-grasslight-512.jpg
squashfs-root/usr/share/man
squashfs-root/usr/share/man/man1
squashfs-root/usr/share/man/man1/glmark2-drm.1
squashfs-root/usr/share/man/man1/glmark2-es2-drm.1
squashfs-root/usr/share/man/man1/glmark2-es2.1
squashfs-root/usr/share/man/man1/glmark2.1
For AppImages that bundle everything, either privately bundle OpenSSL certificates or point to the system's one:
How to make standalone AppImages at the moment? The syntax is not ideal anyway.
https://github.com/probonopd/vokoscreenNG/blob/patch-1/.travis.yml
Bundle everything if system is too new and/or musl based
Hello,
Not running on one of the supported Live systems Grab a Ubuntu, Debian, Deepin, Fedora, openSUSE, elementary OS, KDE neon,... Live ISO and try from there.
How about everything that is Debian-based, including everything that is Ubuntu-based ?
For instance, I'm running Linux Mint.
Thanks
Serve AppImages over IPFS?
If we have root rights then it is trivial to be notified of any files with the .AppImage
extension on the system, when they are being "looked at", at which time they could be registered.
https://blog.yadutaf.fr/2015/04/25/how-i-shrunk-a-docker-image-by-98-8-featuring-fanotify/
https://packages.debian.org/search?keywords=fatrace
But (currently) this requires root rights...
Implement exludelist
Right now we are not keeping track of what is already being watched with inotify. Hence we are trying to watch the same object multiple times, which results in errors. Is there a more elegant way to do it? Is there a way to find out from inotify what we are already watching, so that we don't have to keep track ourselves?
go-appimage/src/appimagetool/appdirtool.go
Lines 1320 to 1324 in c597673
Need to guess plugins directory differently: When there is a platforms subdirectory there, assume that we have found the correct one.
Example:
https://travis-ci.com/github/probonopd/assembly-service/jobs/300887951#L558-L561
Provide versions for arm64 and mips64el.
Currently blocked by probonopd/static-tools#3.
Initial support is available, this allows us to package musl-based applications into AppImages:
#############################################
# Download and extract minimal Alpine system
#############################################
wget http://dl-cdn.alpinelinux.org/alpine/edge/releases/x86_64/alpine-minirootfs-3.11_rc1-x86_64.tar.gz
mkdir -p ./miniroot
cd ./miniroot
tar xf ../alpine-minirootfs-*.tar.gz
cd -
#############################################
# Prepare chroot
#############################################
sudo mount -o bind /dev miniroot/dev
sudo mount -t proc none miniroot/proc
sudo mount -t sysfs none miniroot/sys
sudo cp -p /etc/resolv.conf miniroot/etc/
sudo chroot miniroot /bin/sh <<\EOF
#############################################
# Now inside chroot
#############################################
# Upgrade to Edge, the rolling Alpine release (if we don't have it already)
sed -i -e 's/v[[:digit:]]\..*\//edge\//g' /etc/apk/repositories
apk upgrade --update-cache --available
# Install dependencies and download appimagetool
apk add wget squashfs-tools desktop-file-utils curl appstream libc6-compat
wget -c https://raw.githubusercontent.com/probonopd/uploadtool/master/upload.sh -O uploadtool
chmod +x uploadtool
wget https://github.com/AppImage/AppImageKit/releases/download/continuous/runtime-x86_64
wget http://192.168.0.14/home/me/go/src/github.com/probonopd/go-appimage/src/appimagetool/appimagetool ; chmod +x appimagetool # Not the AppImage for now
export PATH=$(readlink -f .):$PATH
# Install patchelf 0.9 because 0.10 cripples files
apk add --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/v3.10/main/ patchelf=0.9-r2
# or from source
apk add alpine-sdk bash util-linux wget autoconf gettext automake
wget https://github.com/NixOS/patchelf/archive/0.9.tar.gz # 0.10 cripples my files
tar xf *.tar.gz
cd patchelf-*/
./bootstrap.sh
./configure --prefix=/usr
make -j$(nproc)
sudo make install
cd -
# Get the application to be packaged
apk add kcalc
apk fetch kcalc
export VERSION=$(ls kcalc-*.apk | cut -d - -f 2)
mkdir -p appdir ; cd appdir
tar xfv ../kcalc*.apk
cd -
./appimagetool -s deploy appdir/usr/share/applications/*.desktop
./appimagetool appdir/
#############################################
# Exit chroot and clean up
#############################################
exit
EOF
sudo umount miniroot/proc miniroot/sys miniroot/dev
On Deepin Linux the text in notifications (without a timeout) is cut off, and apparently there is no way to see the full text of the message.
Maybe this can be fixed in Deepin Linux.
https://travis-ci.com/probonopd/appimage/jobs/251219352#L359
https://stackoverflow.com/questions/17539407/how-to-import-local-packages-without-gopath
All the .go files in a single directory are part of the same package, and you don't need to import files in the same package (i.e., the same directory). You mentioned working outside
Why does it not work?
All the complicated stuff about GO111MODULE
, vendor, modules... is un-go-like. Why can't it "just work"?
go-appimage/src/appimagetool/appdirtool.go
Lines 268 to 287 in b3760f0
A change was committed to ALSA master:
alsa-project/alsa-lib#34 (comment)
So we should see whether we can make it work now using ALSA master.
If I read the code correctly, then the code looks for the presence of the icon specified in the desktop file in appdir + /usr/share/icons/hicolor/256x256/
here:
go-appimage/src/appimagetool/appimagetool.go
Lines 369 to 382 in f1ebcce
What strikes me though is that in the first check it is checked whether the icon exists at the root of the appdir. This in and of itself is not what I find interesting. Rather the fact that this code part sets the iconFile
variable:
go-appimage/src/appimagetool/appimagetool.go
Lines 367 to 369 in f1ebcce
The second check however doesn't seem to set this variable. Thus
go-appimage/src/appimagetool/appimagetool.go
Line 386 in f1ebcce
Icon file:
aka: An empty String.
A few lines down however this variable is used to assemble a path to copy:
go-appimage/src/appimagetool/appimagetool.go
Line 397 in f1ebcce
In my case this results in this error:
ERROR Copy .DirIcon: read .: is a directory
I also think it is interesting that the code above seems to create a .DirIcon
file in the AppImage's root
go-appimage/src/appimagetool/appimagetool.go
Lines 371 to 381 in f1ebcce
and a bit further down we have
go-appimage/src/appimagetool/appimagetool.go
Lines 391 to 394 in f1ebcce
Deleting pre-existing .DirIcon
message in my logs so maybe I am missing something here 🤔
All in all I think that maybe the functionality for icons in the respective subdir is broken atm...
This does not happen on other distributions (e.g., Xubuntu 18.04 Live ISO).
This is on Deepin Linux 20:
Ended up here from Bundling-Python-apps. Just realised that only amd64 builds are available on Releases page
Does go-appimage supports 32 bit Arch ?
Lines 4 to 6 in 1375a6d
Should I create PR adding that ?
Tanglu GNU/Linux 3 (Chromodoris willani) from 2015 cannot currently run go-appimaged, because it uses a different way to notify the system about changes in the mounted volumes:
path=/org/gtk/Private/RemoteVolumeMonitor; interface=org.gtk.Private.RemoteVolumeMonitor; member=MountRemoved
path=/org/gtk/Private/RemoteVolumeMonitor; interface=org.gtk.Private.RemoteVolumeMonitor; member=MountAdded
path=/org/gtk/Private/RemoteVolumeMonitor; interface=org.gtk.Private.RemoteVolumeMonitor; member=VolumeChanged
path=/org/gtk/Private/RemoteVolumeMonitor; interface=org.gtk.Private.RemoteVolumeMonitor; member=VolumeMount
So it looks like we also need to implement this in addition to org.kde.Solid.PowerManagement and org.gtk.vfs.UDisks2VolumeMonitor...
package main
import (
"bufio"
"fmt"
"os"
"path/filepath"
"strings"
)
func main() {
// TODO: support musl; it uses /etc/ld-musl-$ARCH.path instead;
// this is a simple newline or colon separated list of directories
ldLibraryPathForCore := getDirsFromSoConf("/etc/ld.so.conf")
fmt.Println(ldLibraryPathForCore)
}
// getDirsFromSoConf returns a []string with the directories specified
// in the ld config file at path, usually '/etc/ld.so.conf',
// and in its included config files. We need to search in those locations
// for libraries as well
func getDirsFromSoConf(path string) []string {
var out []string
f, err := os.Open(path)
if err != nil {
return nil
}
defer f.Close()
scanner := bufio.NewScanner(f)
for scanner.Scan() {
line := scanner.Text()
if strings.TrimSpace(line) == "" || strings.HasPrefix(line, "#") {
continue
} else if strings.HasPrefix(line, "include ") {
p := strings.Split(line, " ")[1]
files, err := filepath.Glob(p)
if err != nil {
return out
}
for _, file := range files {
out = append(out, getDirsFromSoConf(file)...)
}
continue
}
out = append(out, strings.TrimSpace(line))
}
return out
}
Hi,
After the fix in #44 -s deploy does indeed work for qt5 and it does appear to be completely self contained.
However a strange problem has arisen that was not an issue before. The same thing occurs at build 495 and that is why I tested build 497.
My application checks XDG_CONFIG_HOME for the location of the user's config folder.
That is now coming back as: /home/juus/.config/ld-linux-x86-64.so
This is also the case where a "My.AppImage.config" folder is available, putting an ld-linux-x86-64.so folder in there too.
Within that .config/ld-linux-x86-64.so folder everything then follows as if it was the normal .config folder, putting a folder with my Appname inside.
I've checked older AppImages (built with linuxdeploy) and that was not a problem, it always returned either /home/juus/.config or My.AppImage.config.
In the log references to "ld-linux-x86-64.so" were:
2020/08/02 11:16:48 Deploying /lib64/ld-linux-x86-64.so.2...
...
2020/08/02 11:16:49 Copying in and patching ELFs which are not already in the AppDir...
2020/08/02 11:16:49 Not writing rpath in commandoo.AppDir/usr/lib64/ld-linux-x86-64.so.2 because itname starts with ld-...
2020/08/02 11:16:49 Patching qt_prfxpath, otherwise can't load platform plugin...
2020/08/02 11:16:49 Offset of qt_prfxpath: 3561388
2020/08/02 11:16:49 Qt prefix directory in the AppDir: commandoo.AppDir/usr/lib/x86_64-linux-gnu/qt
2020/08/02 11:16:49 Relative path from ld-linux to Qt prefix directory in the AppDir: ../usr/lib/x864-linux-gnu/qt5
2020/08/02 11:16:49 Patching qt_prfxpath in libQt5Core.so.5 to ..
2020/08/02 11:16:50 Copying in copyright files...
Run Deepin 20 Beta Live ISO, then run appimaged from this repository like this:
Wait for 2 minutes.
Result:
me@host:~$ systemctl --user status appimaged
● appimaged.service - AppImage system integration daemon
Loaded: loaded (/home/me/.config/systemd/user/appimaged.service; enabled; vendor preset: enabled)
Active: activating (auto-restart) (Result: exit-code) since Thu 2020-05-21 12:35:30 CEST; 976ms ago
Process: 8789 ExecStart=/home/me/Downloads/appimaged-482-x86_64.AppImage (code=exited, status=1/FAILURE)
Main PID: 8789 (code=exited, status=1/FAILURE)
May 21 12:35:30 host systemd[3938]: appimaged.service: Main process exited, code=exited, status=1/FAILURE
May 21 12:35:30 host systemd[3938]: appimaged.service: Failed with result 'exit-code'.
me@host:~$ cat /etc/*release
DISTRIB_ID=Deepin
DISTRIB_RELEASE=20
DISTRIB_DESCRIPTION="Deepin 20 Beta"
DISTRIB_CODENAME=apricot
PRETTY_NAME="Deepin 20 Beta"
NAME="Deepin"
VERSION_ID="20 Beta"
VERSION="20 Beta"
ID=Deepin
HOME_URL="https://www.deepin.com/"
BUG_REPORT_URL="https://bbs.deepin.org/"
For example, the GNOME Drawing app, which is written in Python
We have a daemon that handles AppImages, and among other things, can generate thumbnails for them and can integrate them into the system.
We want to be notified whenever AppImages (or more generally, ELF executable files) are displayed so that we can generate a thumbnail and, while we are at it, do desktop integration.
The Thumbnail management DBus specification at https://wiki.gnome.org/DraftSpecs/ThumbnailerSpec describes how to interact with thumbnailers over DBus.
We can see requests for files to be thumbnailed on the system using
dbus-monitor "type='signal',interface='org.freedesktop.thumbnails.Thumbnailer1'"
We can send a request to get a thumbnail using
dbus-send \
--session \
--print-reply \
--dest=org.freedesktop.thumbnails.Thumbnailer1 \
/org/freedesktop/thumbnails/Thumbnailer1 \
org.freedesktop.thumbnails.Thumbnailer1.Queue \
array:string:"file:///usr/share/pixmaps/xoo.png" \
array:string:"image/png" \
string:"normal" \
string:"default" \
uint32:0
On Xfce, thumbnails are requested when
Thumbnails are not requested when
Note that by default, thumbnails get requested for files that have mime types that are registered to be thumbnailed, such as PNG and JPG, but not for ELF executables such as AppImages. How can we make it happen so that thumbnails get requested for ELF files, too?
Apparently we need to register a "specialized thumbnailer" over DBus so that we get notifications. Appaerntly we need to do this using the org.freedesktop.thumbnails.Manager1
interface. The following does not seem to work, why?
dbus-send \
--session \
--print-reply \
--dest=org.freedesktop.thumbnails.Manager1 \
/org/freedesktop/thumbnails/Manager1 \
org.freedesktop.thumbnails.Manager1.Register \
string:"/com/company/Thumbnailer1" \
array:string:"file" \
array:string:"application/x-executable"
This only results in
Error org.freedesktop.DBus.Error.InvalidArgs: Type of message, '(sasas)', does not match expected type '(ss)'
"Register a specialized thumbnailer dynamically" at https://wiki.gnome.org/DraftSpecs/ThumbnailerSpec shows some XML. Why XML? Where am I supposed to enter that XML? Why does the documentation not show how to send such a message using dbus-send
? What is object_path
supposed to be?
I interpret the XML on https://wiki.gnome.org/DraftSpecs/ThumbnailerSpec to translate to the dbus-send
command above, but apparently I am wrong. What is the proper way of doing it?
Apparently registering a "specialized thumbnailer" over DBus is little-used, at least I was not able to find ample examples on GitHub.
Can someone please help me, @pvanhoof @robtaylor maybe?
Currently we only open the folder in which the AppImage is located, but it would be much nicer if we could select the AppImage.
Deepin has this kind of functionality, e.g, in their screenshot application. The following DBus message gets sent:
method call time=1573414337.468604 sender=:1.257 -> destination=org.freedesktop.DBus serial=26 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=AddMatch
string "type='signal',sender='org.freedesktop.DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',arg0='com.deepin.dde.Notification'"
method call time=1573414337.469102 sender=:1.257 -> destination=org.freedesktop.Notifications serial=27 path=/org/freedesktop/Notifications; interface=org.freedesktop.Notifications; member=Notify
string "Deepin Screenshot"
uint32 0
string "deepin-screenshot"
string ""
string "Das Bild wurde in /home/deepin/Desktop/DeepinBildschirmfoto_Bereich auswählen_20191110193217.png gespeichert"
array [
string "_open"
string "Ansicht"
]
array [
dict entry(
string "x-deepin-action-_open"
variant string "/usr/bin/dde-file-manager,file:///home/deepin/Desktop?selectUrl=file:///home/deepin/Desktop/DeepinBildschirmfoto_Bereich auswählen_20191110193217.png"
)
]
int32 0
Note the selectUrl=
part. Is this XDG standardized or a Deepin special feature?
If so, this totally needs to become a XDG standard so that it will work on all Linux desktops.
Getting
panic: runtime error: slice bounds out of range [2:1]
goroutine 20 [running]:
github.com/godbus/dbus.(*Conn).inWorker(0xc000104200)
/home/me/go/pkg/mod/github.com/godbus/[email protected]+incompatible/conn.go:355 +0xefe
created by github.com/godbus/dbus.(*Conn).Auth
/home/me/go/pkg/mod/github.com/godbus/[email protected]+incompatible/auth.go:118 +0x621
Restarting appimaged usually resolves this.
Something broke recently, causing this application to no longer compile.
client.Authentication undefined (type *travis.Client has no field or method Authentication)
Full build log:
https://api.travis-ci.com/v3/job/326497867/log.txt
Reference:
shuheiktgw/go-travis#77
The order of menu entries in Deepin Linux seems random. Is this an issue in Deepin Linux?
Deepin 20 Beta:
In other distributions, the icons are ordered alphabetically.
With the cross-compiler built into Go, it should be possible to only use one build machine for all architectures, hence saving Travis CI resources.
However, as long as we are using come C (currently for the calculation of the ELF size), we need to install a C crosscompiler toolchain, and this is where the usual Linux complexity begins.
dist: xenial
language: go
go:
- "1.13"
git:
depth: 1
script:
- sudo apt-get -y update
- sudo apt-get -y install gcc-multilib g++-multilib gcc-arm-linux-gnueabi gcc-aarch64-linux-gnu psmisc dbus-x11
- if [ $(go env GOHOSTARCH) == "amd64" ] ; then wget -c -q https://github.com/upx/upx/releases/download/v3.95/upx-3.95-amd64_linux.tar.xz ; fi
- if [ $(go env GOHOSTARCH) == "arm64" ] ; then wget -c -q https://github.com/upx/upx/releases/download/v3.95/upx-3.95-arm64_linux.tar.xz ; fi
- tar xf upx-*_linux.tar.xz
- export PATH=$(readlink -f upx-*_linux/):$PATH
- export GO111MODULE=off # Needed?
- go get github.com/probonopd/appimage/src/appimagetool
- env CGO_ENABLED=1 GOOS=linux GOARCH=386 go build -trimpath -ldflags="-s -w" github.com/probonopd/appimage/src/appimaged
- upx -9 appimagetool
- mv ./appimagetool ./appimagetool-386
- go build -trimpath -ldflags="-s -w" appimagetool.go
- upx -9 appimagetool
- mv ./appimagetool ./appimagetool-amd64
- env CC=arm-linux-gnueabi-gcc CGO_ENABLED=1 GOOS=linux GOARCH=arm32 go build -trimpath -ldflags="-s -w" github.com/probonopd/appimage/src/appimaged
- upx -9 appimagetool
- mv ./appimagetool ./appimagetool-arm32
- env CC=aarch64-linux-gnu CGO_ENABLED=1 GOOS=linux GOARCH=arm64 go build -trimpath -ldflags="-s -w" github.com/probonopd/appimage/src/appimaged
- upx -9 appimagetool
- mv ./appimagetool ./appimagetool-arm64
- go get github.com/probonopd/appimage/src/zsyncmake
- env CGO_ENABLED=1 GOOS=linux GOARCH=386 go build -trimpath -ldflags="-s -w" github.com/probonopd/appimage/src/appimaged
- upx -9 zsyncmake
- mv ./zsyncmake ./zsyncmake-386
- go build -trimpath -ldflags="-s -w" zsyncmake.go
- upx -9 zsyncmake
- mv ./zsyncmake ./zsyncmake-amd64
- env CC=arm-linux-gnueabi-gcc CGO_ENABLED=1 GOOS=linux GOARCH=arm32 go build -trimpath -ldflags="-s -w" github.com/probonopd/appimage/src/appimaged
- upx -9 zsyncmake
- mv ./zsyncmake ./zsyncmake-arm32
- env CC=aarch64-linux-gnu CGO_ENABLED=1 GOOS=linux GOARCH=arm64 go build -trimpath -ldflags="-s -w" github.com/probonopd/appimage/src/appimaged
- upx -9 zsyncmake
- mv ./zsyncmake ./zsyncmake-arm64
- go get github.com/probonopd/appimage/src/appimaged
- env CGO_ENABLED=1 GOOS=linux GOARCH=386 go build -trimpath -ldflags="-s -w" github.com/probonopd/appimage/src/appimaged
- upx -9 appimaged
- mv ./appimaged ./appimaged-386
- go build -trimpath -ldflags="-s -w" appimaged.go
- upx -9 appimaged
- mv ./appimaged ./appimaged-amd64
- env CC=arm-linux-gnueabi-gcc CGO_ENABLED=1 GOOS=linux GOARCH=arm32 go build -trimpath -ldflags="-s -w" github.com/probonopd/appimage/src/appimaged
- upx -9 appimaged
- mv ./appimaged ./appimaged-arm32
- env CC=aarch64-linux-gnu CGO_ENABLED=1 GOOS=linux GOARCH=arm64 go build -trimpath -ldflags="-s -w" github.com/probonopd/appimage/src/appimaged
- upx -9 appimaged
- mv ./appimaged ./appimaged-arm64
# Test run
- ./appimaged-amd64 &
- sleep 10
- killall appimaged
after_success:
- wget -c https://github.com/probonopd/uploadtool/raw/master/upload.sh
- bash upload.sh *.386 *amd64 *arm32 *arm64
branches:
except:
- # Do not build tags that we create when we upload to GitHub Releases
- /^(?i:continuous)/
#cache:
# directories:
# - $HOME/gopath/src
The following packages have unmet dependencies:
gcc-aarch64-linux-gnu : Depends: gcc-5-aarch64-linux-gnu (>= 5.3.1-3~)
gcc-arm-linux-gnueabi : Depends: gcc-5-arm-linux-gnueabi (>= 5.3.1-3~)
E: Unable to correct problems, you have held broken packages.
We should definitely revisit this once we do not use any C anymore.
Hi,
This is Julius, we had a conversation on appimage discourse re: "modern" appimages.
I tried your suggestion of -s deploy with that latest appimagetool 489. Here are what I think are the relevant failure messages:
2020/07/29 10:51:06 Find out whether Qt is a dependency of the application to be bundled...
2020/07/29 10:51:06 Detected Qt 5
2020/07/29 10:51:06 Offset of qt_prfxpath: 3561388
2020/07/29 10:51:06 Length of value of qt_prfxpath: 4
qt_prfxpath: /usr
2020/07/29 10:51:06 Got qt_prfxpath but it does not contain 'plugins'
...
2020/07/29 10:36:21 Guessed qt_prfxpath to be /usr/lib/x86_64-linux-gnu/kconf_update_bin
2020/07/29 10:36:21 Guessed qt_prfxpath to be /usr/lib/x86_64-linux-gnu/qt5
2020/07/29 10:36:21 Guessed qt_prfxpath to be /usr/share/lintian/overrides
2020/07/29 10:36:21 Guessed qt_prfxpath to be /usr/src/linux-headers-5.4.0-26/scripts
2020/07/29 10:36:21 Guessed qt_prfxpath to be /usr/src/linux-headers-5.4.0-26-generic/scripts
2020/07/29 10:36:21 Guessed qt_prfxpath to be /usr/src/linux-headers-5.4.0-42/scripts
2020/07/29 10:36:21 Guessed qt_prfxpath to be /usr/src/linux-headers-5.4.0-42-generic/scripts
Looking in /usr/src/linux-headers-5.4.0-42-generic/scripts/plugins
2020/07/29 10:36:21 Could not find 'plugins/platforms/libqxcb.so' in qtPrfxpath, exiting
my /usr/src/linux-headers-5.4.0-42-generic/scripts/ folder does not have a plugins folder or file.
I did check and that file does exist in my /usr/.../qt/ folder fwiw.
The file also was present in ./AppDir/usr/plugins/platforms (this appdir was pre-existing from a linuxdeploy).
I tried a "bare bones" (only a bin executable, icons, and the desktop file) appdir and had the same failure.
HTH.
Some distribution are shipping with a conflicting implementation and annoying UX (asking users to move AppImages). We need to disable it.
neon@neon:~$ cat /proc/sys/fs/binfmt_misc/appimage-type1
enabled
interpreter /usr/bin/AppImageLauncher
flags:
offset 8
magic 414901
neon@neon:~$ cat /proc/sys/fs/binfmt_misc/appimage-type2
enabled
interpreter /usr/bin/AppImageLauncher
flags:
offset 8
magic 414902
The following works to disable the annoying popups:
echo "0" | sudo tee /proc/sys/fs/binfmt_misc/appimage-type1
echo "0" | sudo tee /proc/sys/fs/binfmt_misc/appimage-type2
While we are at it, we should also do
systemctl --user stop appimagelauncherfs.service
systemctl --user stop appimagelauncherd.service
Implement signatures.
Note to self for how to calculate sha256 hashes with skipping certain ranges (more precisely, calculate the hash as if the ranges consisted of 0x00
s):
package main
import (
"bytes"
"crypto/sha256"
"fmt"
"hash"
"io"
"log"
"os"
"strconv"
)
func main() {
f, err := os.Open("file.txt")
if err != nil {
log.Fatal(err)
}
defer f.Close()
h := sha256.New()
hashDummyRange(h, 5)
hashRange(f, h, 5, 5)
fmt.Printf("%x\n", h.Sum(nil))
fmt.Println("Compare to doing it in one go")
h = sha256.New()
s := io.NewSectionReader(f, 0, 10)
if _, err := io.Copy(h, s); err != nil {
log.Fatal(err)
}
fmt.Printf("%x\n", h.Sum(nil))
}
func hashRange(f *os.File, h hash.Hash, offset int64, length int64) {
fmt.Println("...continuing with checksum from offset", strconv.FormatInt(offset, 10), "for", strconv.FormatInt(length, 10), "bytes")
s := io.NewSectionReader(f, offset, length)
if _, err := io.Copy(h, s); err != nil {
log.Fatal(err)
}
}
func hashDummyRange(h hash.Hash, length int) {
fmt.Println("Checksum for", strconv.Itoa(length), "bytes as if they were 0x00")
h.Write(bytes.Repeat([]byte{0x00}, length))
}
$ xxd file.txt
00000000: 0000 0000 0036 3738 3930 3132 3334 3536 .....67890123456
Results in:
Checksum for 5 bytes as if they were 0x00
...continuing with checksum from offset 5 for 5 bytes
9005925b7d0cc92b1c43ee07da6c45b120ce90c3bad1e9d311a5885a6cbab566
Compare to doing it in one go
9005925b7d0cc92b1c43ee07da6c45b120ce90c3bad1e9d311a5885a6cbab566
Move to go modules so that we can pin the versions of dependencies being used.
However, using
go get github.com/probonopd/go-appimage
cd /home/me/go/src/github.com/probonopd/go-appimage/
go mod init
go mod tidy
go build ./...
we are running into
# github.com/coreos/go-systemd/dbus
/home/me/go/pkg/mod/github.com/coreos/[email protected]/dbus/dbus.go:127:33: cannot use dbus.SystemBusPrivate (type func() (*dbus.Conn, error)) as type func(...<T>) (*dbus.Conn, error) in argument to dbusAuthHelloConnection
/home/me/go/pkg/mod/github.com/coreos/[email protected]/dbus/dbus.go:136:33: cannot use dbus.SessionBusPrivate (type func() (*dbus.Conn, error)) as type func(...<T>) (*dbus.Conn, error) in argument to dbusAuthHelloConnection
/home/me/go/pkg/mod/github.com/coreos/[email protected]/dbus/dbus.go:146:42: undefined: dbus.ConnOption
/home/me/go/pkg/mod/github.com/coreos/[email protected]/dbus/dbus.go:204:48: undefined: dbus.ConnOption
/home/me/go/pkg/mod/github.com/coreos/[email protected]/dbus/dbus.go:224:53: undefined: dbus.ConnOption
Will there be a Go implementation of zsync client?
For tagged releases, use the release tag as $VERSION.
For consideration: Also make sure that tagged releases get update information that does not update to non-tagged versions.
Example: https://github.com/johanmattssonm/birdfont/releases
Reference: johanmattssonm/birdfont#98 (comment)
https://github.com/probonopd/vokoscreenNG/blob/patch-1/.travis.yml
Results in
(vokoscreenNG:11226): GStreamer-WARNING **: 00:00:07.199: External plugin loader failed. This most likely means that the plugin loader helper binary was not found or could not be run. You might need to set the GST_PLUGIN_SCANNER environment variable if your setup is unusual. This should normally not be required though.
Why?
Would it work in standalone mode?
inotify(?) prevents disks from being unmounted.
It should not.
Inotify watches can not prevent unmounting of filesystem. The documentation even mentions the specialized inotify event, that gets dispatched when the filesystem is unmounted: "IN_UNMOUNT - Filesystem containing watched object was unmounted". And if you were to read a tiny bit on the subject, you would discover, that inotify/fanotify have been specifically created to address issue of their predecessor dnotify, which didn't support unmounting watched directory.
More information:
https://lwn.net/Articles/604686/
If it is not inotify, what is it then?
Interestingly this happens with the NTFS drive but not with e.g., Live ISO images written to USB disks.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.