README.md (2222B)
1 # taler-packaging ng 2 3 This directory contains the improved implementation of container-based 4 packaging for GNU Taler and associated packages. 5 6 The major improvement is that a component can be built *without* having to 7 rebuild every single package. 8 9 Instead, all dependencies are managed via apt. Each package is built in a 10 fresh environment, with build dependencies pulled in via apt. Previously built 11 packages are available via a file-based apt source. 12 13 Build-time dependencies are automatically installed, making sure that 14 missing build-time dependencies would be detected. 15 16 The packaging logic is also the same for Debian and Ubuntu. 17 18 ## Prerequisites 19 20 You need "podman". On Debian bookworm, you will get shitty performance unless you: 21 22 ``` 23 # apt install containers-storage 24 ``` 25 26 Then check with 27 28 ``` 29 # podman info --debug 30 ``` 31 32 that you get "graphDriverName: overlay" 33 34 If not, try 35 36 ``` 37 # podman system reset 38 ``` 39 40 (deletes all containers, enables reset of the storage layer). 41 42 43 ## Prerequisites for Cross-Builds 44 45 To build for other architecture, you need to install the following packages: 46 ``` 47 apt-get install qemu-user-static binfmt-support 48 ``` 49 50 ## Structure 51 52 * `packages/$DISTRO-$DISTRO_VERNAME`: Output folder for debian packages. 53 Also contains a `Packages.gz` metadata file generated by `dpkg-scanpackages` 54 so that this folder can be directly consumed as a trusted package source. 55 56 * `buildscripts/*`: Build scripts used during the package build steps. 57 * `distros/*`: Files for building for a specific distro. 58 * `server-side/*.sh`: Scripts that must be installed in taler-packaing@taler.net:$HOME 59 60 61 ## Recipes 62 63 ### Building for a distribution 64 65 ``` 66 ./taler-pkg build $DISTRO 67 ``` 68 69 ### Updating component versions 70 71 ``` 72 # will output current vs latest version 73 ./taler-pkg show-latest 74 75 # Update component version 76 echo $desired_version > buildconfig/$component.tag 77 ``` 78 79 ### Forcing a rebuild 80 81 ``` 82 rm packages/$distro/$component.built.tag 83 ``` 84 85 ### Adding a new distro 86 87 A new distro needs just needs a Dockerfile in ``distros/Dockerfile.$distro``. 88 89 90 ## Future Improvements 91 92 * caching (gradle, npm, ...) between builds 93 * git checkouts on host, allowing fully offline builds 94 * more automation for common tasks 95 * more distros