Difference between revisions of "Development"
(→Multiarch: Fix link) |
(→Technical: Add instructions for how to set up an ARM/ARM64 chroot on a PC) |
||
Line 74: | Line 74: | ||
If you wish to remove the container, just delete the directory we created: | If you wish to remove the container, just delete the directory we created: | ||
sudo rm -fr /var/lib/container/stretch | sudo rm -fr /var/lib/container/stretch | ||
=== Cross-distro solution for development inside an ARM/ARM64 chroot on a PC === | |||
It's possible to set up an emulated chroot development environment for ARM on x86/amd64 that will work on almost any Linux distro with just a few simple steps. This will work for systemd-less distros including Devuan and even Maemo Leste on x86/amd64. This guide provides an example for how to set up a generic ARM64 development chroot on a Debian-based distro. This method can similarly be used with images (tarballs) for other devices. | |||
1. Install the QEMU full system emulation static binaries and [http://binfmt-support.nongnu.org/ support for foreign binaries]: | |||
$ sudo apt-get install qemu-user-static binfmt-support | |||
The installation should register ARM binaries for automatic execution via QEMU. You can verify this with '''update-binfmts''': | |||
$ sudo update-binfmts --display qemu-arm | |||
qemu-arm (enabled): | |||
package = qemu-user-static | |||
type = magic | |||
offset = 0 | |||
magic = \x7f\x45\x4c\x46\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00 | |||
mask = \xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff | |||
interpreter = /usr/bin/qemu-arm-static | |||
detector = | |||
2. Find the [http://maedevu.maemo.org/images/arm64-generic/ latest] Maemo Leste ARM64 tarball and download and extract it: | |||
$ mkdir leste-arm64 | |||
$ cd leste-arm64 | |||
$ curl http://maedevu.maemo.org/images/arm64-generic/20190226/maemo-leste-1.0-arm64-generic-20190226.tar.gz | gunzip -c | sudo tar xvf - | |||
3. From the same directory, configure the chroot with a few resources from your host system: | |||
$ sudo mount -t proc proc proc | |||
$ sudo mount -o bind /dev dev | |||
$ sudo mount -o bind /dev/pts dev/pts | |||
4. From the same directory, create a symlink for the mount table: | |||
$ sudo ln -s /proc/mounts etc/mtab | |||
5. From the same directory, set the locale, enter the chroot and switch to the unprivileged user: | |||
$ sudo LC_ALL=C chroot . /bin/su - user | |||
You'll now be ready to use your Maemo Leste ARM64 development environment: | |||
$ uname -m | |||
aarch64 | |||
Once you have finished with it, you can exit and unmount the resources you previously mounted: | |||
$ exit | |||
$ sudo umount dev/pts dev proc | |||
=== TODO === | === TODO === |
Revision as of 23:15, 30 April 2019
Maemo Leste development is split up in a few different places.
Communication and organising
- Our https://maemo-leste.github.io website is where we post (news) updates, as well as on this maemo.org thread: https://talk.maemo.org/showthread.php?t=100192
- There is the issue tracker; for filing bugs and keeping track of issues/milestones. https://github.com/maemo-leste/bugtracker
- The day-to-day development and user chatter mostly takes place in the IRC channel (We might eventually want to switch some discussion to a mailing list, but that has not happened so far. Please raise your voice if this is important to you.)
- This wiki: for documenting the status of various long-running projects, status per device, etc.
Technical
All our git repositories can be found here: https://github.com/maemo-leste
Jenkins
To aid development and provide "continous integration" we have a build server, which takes a git repository and builds software and packages it, and will automatically make said package end up in Maemo Leste repositories. This is done by Jenkins, and the instance can be found here: https://phoenix.maemo.org/
Developing on a device
Actual development is mostly done from within Maemo Leste itself. (For Maemo Fremantle users, this might sound weird, but there is essentially no need for a 'scratchbox' type VM)
The current developers mostly work in a Virtual Machine or on a Raspberry Pi.
Multiarch
Multiarch is ability present on modern Debian systems that allows you to develop for Maemo Leste using your PC/Mac/Notebook etc.
Here we show how you can easily setup multiarch environment and build some packages on a Debian system. This can be adapted to develop on other systems as well. If you have such experience, please feel free to expand this section to help more people be involved in Maemo Leste development.
# Make a container for our development system DIR=/var/lib/container/stretch sudo apt-get install qemu-user-static debootstrap && sudo debootstrap stretch $DIR http://deb.debian.org/debian && echo "strech_cross" | sudo tee $DIR/etc/debian_chroot && sudo systemd-nspawn --bind /usr/bin/qemu-arm-static -D $DIR # Setup build environment inside the container cat >> ~/.bashrc << EOF && export PKG_CONFIG_PATH=/usr/lib/pkgconfig export CC=arm-linux-gnueabihf-gcc EOF dpkg --add-architecture armhf && apt-get -y install --no-install-recommends build-essential crossbuild-essential-armhf ca-certificates && cat >> /etc/apt/sources.list << "EOF" && deb http://maedevu.maemo.org/leste leste main contrib non-free n900 deb http://maedevu.maemo.org/leste-devel leste-devel main contrib non-free n900 deb-src http://deb.debian.org/debian stretch main deb-src http://maedevu.maemo.org/leste leste main contrib non-free n900 deb-src http://maedevu.maemo.org/leste-devel leste-devel main contrib non-free n900 EOF wget https://maedevu.maemo.org/testing-key.asc && apt-key add testing-key.asc && rm -f testing-key.asc && rm -f /var/cache/apt/archives/*.deb && apt-get update && exec bash # Build Xorg for Nokia N900 apt-get source xserver-xorg-core && cd xorg-server-1.19.2 && wget https://raw.githubusercontent.com/buildroot/buildroot/88e0f214dcb7c2a99a4425a70673d2aa5f48d720/package/x11r7/xserver_xorg-server/1.20.4/0002-configure.ac-Fix-check-for-CLOCK_MONOTONIC.patch && mv -v 0002-configure.ac-Fix-check-for-CLOCK_MONOTONIC.patch debian/patches && echo -e "# crossbuild fix\n0002-configure.ac-Fix-check-for-CLOCK_MONOTONIC.patch" >> debian/patches/series && apt-get -y build-dep -a armhf . && time dpkg-buildpackage -aarmhf -j4 -b && echo OK || echo FAIL
To login the container later, issue the command:
sudo systemd-nspawn --bind /usr/bin/qemu-arm-static -D /var/lib/container/stretch
If you wish to remove the container, just delete the directory we created:
sudo rm -fr /var/lib/container/stretch
Cross-distro solution for development inside an ARM/ARM64 chroot on a PC
It's possible to set up an emulated chroot development environment for ARM on x86/amd64 that will work on almost any Linux distro with just a few simple steps. This will work for systemd-less distros including Devuan and even Maemo Leste on x86/amd64. This guide provides an example for how to set up a generic ARM64 development chroot on a Debian-based distro. This method can similarly be used with images (tarballs) for other devices.
1. Install the QEMU full system emulation static binaries and support for foreign binaries:
$ sudo apt-get install qemu-user-static binfmt-support
The installation should register ARM binaries for automatic execution via QEMU. You can verify this with update-binfmts:
$ sudo update-binfmts --display qemu-arm qemu-arm (enabled): package = qemu-user-static type = magic offset = 0 magic = \x7f\x45\x4c\x46\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00 mask = \xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff interpreter = /usr/bin/qemu-arm-static detector =
2. Find the latest Maemo Leste ARM64 tarball and download and extract it:
$ mkdir leste-arm64 $ cd leste-arm64 $ curl http://maedevu.maemo.org/images/arm64-generic/20190226/maemo-leste-1.0-arm64-generic-20190226.tar.gz | gunzip -c | sudo tar xvf -
3. From the same directory, configure the chroot with a few resources from your host system:
$ sudo mount -t proc proc proc $ sudo mount -o bind /dev dev $ sudo mount -o bind /dev/pts dev/pts
4. From the same directory, create a symlink for the mount table:
$ sudo ln -s /proc/mounts etc/mtab
5. From the same directory, set the locale, enter the chroot and switch to the unprivileged user:
$ sudo LC_ALL=C chroot . /bin/su - user
You'll now be ready to use your Maemo Leste ARM64 development environment:
$ uname -m aarch64
Once you have finished with it, you can exit and unmount the resources you previously mounted:
$ exit $ sudo umount dev/pts dev proc
TODO
- Discuss where people look to pick up issues (clear answer is the bugtracker, but still)
- How people can make changes and how to send them in