From 176e6bc7a14a00becb32045a761aad2d44c0796b Mon Sep 17 00:00:00 2001 From: Daniel Stock Date: Thu, 20 Sep 2018 15:40:54 +0200 Subject: [PATCH] AA --- Notes.md | 188 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 188 insertions(+) create mode 100644 Notes.md diff --git a/Notes.md b/Notes.md new file mode 100644 index 0000000..227290a --- /dev/null +++ b/Notes.md @@ -0,0 +1,188 @@ +# DEB packaging store + +http://packaging.ubuntu.com/html/packaging-new-software.html +https://blog.serverdensity.com/how-to-create-a-debian-deb-package/ +https://www.debian.org/doc/debian-policy/ch-binary.html + + +## Creating a package + +**Debian package** + +Create a folder structure with your stuff: + + package/ + │ + ├─ DEBIAN/ + │ ├─ control (mandatory) + │ ├─ postinst (mandatory) + │ ├─ postrm (mandatory) + │ └─ ... + │ + ├─ assets/ + │ ├─ presentation/ + │ │ ├─ LICENSE.md + │ │ ├─ README.md + │ │ ├─ start-presentation.sh (mandatory) + │ │ ├─ stop-presentation.sh (mandatory) + │ │ └─ ... + │ │ + │ └─ data/ + │ └─ ... + │ + └─ opt/ + └─ tooloop/ + └─ settings─server/ + └─ installed_app/ + ├─ controller.py + └─ settings.html + + +The `DEBIAN` contains the package information and some control files. +All other folders except simply copied to disk for you. + + +**The DEBIAN/control file** + +https://linux.die.net/man/5/deb-control + + Package: tooloop-processing-example + # Use semantic versioning https://semver.org/ + Version: 0.9.0 + Maintainer: vollstock + Homepage: https://www.vollstock.de + Bugs: https://github.com/vollstock/Tooloop-Examples + # One of "tooloop/presentation", "tooloop/addon" + Section: tooloop/presentation + # One of "amd64", "armvl7", "all" + Architecture: amd64 + Depends: tooloop-processing tooloop-processing (= 3.4.0) + # App name shown in the app center. + Name: Processing Example + # First line is the short description shown in the app center. + # All following lines are used as detailed description. + Description: A simple example, how to make a processing app + Longer description… + + +**Scripts** + +You can add scripts in `DEBIAN` to further customize installation: + +| script | when | +|----------|---------------------| +| preinst | before installation | +| postinst | after installation | +| prerm | before removal | +| postrm | after removal | + +The scripts can be used to e. g. reload the settings server: + + #!/bin/bash + set -e + systemctl restart tooloop-settings-server + exit 0 + + +**Building the Debian package** + + dpkg --build packagefolder packagename_version_architecture.deb + +e.g. + + dpkg --build kiosk-browser tooloop-processing-example_0.9.0_amd64.deb + + + +**Packaging for Tooloop** + + package_name/ + │ + ├─ package/ + │ └─ ... + │ + └─ media/ + ├─ preview_image.jpg (mandatory) + ├─ _1.png + ├─ _2.jpg + └─ ... + +media: png or jpg +preview_image.xxx: thumbnail +xxxxx: app center media + +ZIP it + + + +## Setting up the local .deb repository + +https://askubuntu.com/questions/170348/how-to-create-a-local-apt-repository#176546 + +Create a packages directory and a dirctory where installed addons will live in: + + mkdir /assets/packages /assets/addons + chown -R tooloop:tooloop /assets + +Add `.keep` files so apt will not remove folders when purging packages: + + touch /assets/addons/.keep + touch /assets/presentation/.keep + touch opt/tooloop/settings─server/installed_app/.keep + +Create a script that will scan packages and create a RELEASE file apt-get update can read + +`/opt/tooloop/scripts/update-tooloop-packages` + + #! /bin/bash + + cd /assets/packages + + # Generate the Packages file + dpkg-scanpackages . /dev/null > Packages + gzip --keep --force -9 Packages + + # Generate the Release file + cat conf/distributions > Release + # The Date: field has the same format as the Debian package changelog entries, + # that is, RFC 2822 with time zone +0000 + echo -e "Date: `LANG=C date -Ru`" >> Release + # Release must contain MD5 sums of all repository files (in a simple repo just the Packages and Packages.gz files) + echo -e 'MD5Sum:' >> Release + printf ' '$(md5sum Packages.gz | cut --delimiter=' ' --fields=1)' %16d Packages.gz' $(wc --bytes Packages.gz | cut --delimiter=' ' --fields=1) >> Release + printf '\n '$(md5sum Packages | cut --delimiter=' ' --fields=1)' %16d Packages' $(wc --bytes Packages | cut --delimiter=' ' --fields=1) >> Release + # Release must contain SHA256 sums of all repository files (in a simple repo just the Packages and Packages.gz files) + echo -e '\nSHA256:' >> Release + printf ' '$(sha256sum Packages.gz | cut --delimiter=' ' --fields=1)' %16d Packages.gz' $(wc --bytes Packages.gz | cut --delimiter=' ' --fields=1) >> Release + printf '\n '$(sha256sum Packages | cut --delimiter=' ' --fields=1)' %16d Packages' $(wc --bytes Packages | cut --delimiter=' ' --fields=1) >> Release + + # Get apt to see the changes + sudo apt-get update + + +## Useful commands + +Install package + + sudo apt install --allow-unauthenticated + +Remove package + + sudo apt purge && sudo apt autoremove + +List installed + + apt list --installed tooloop* + +List available + + apt list tooloop* + +Search packages in section `tooloop` + + aptitude -F'|%p|%d|' search '?section(tooloop/addon)' + +https://askubuntu.com/a/473511/873460 + + +