Group: Hardware/FSDG distributions/Trisquel
(→Trisquel versions: aramo: Add kernel version. Tested with 'apt install linux-image-generic'.) |
(→How to install Trisquel 10 (etiona) on 32bit ARM SBCs: clarify sentense.) |
||
(7 intermediate revisions by 2 users not shown) | |||
Line 37: | Line 37: | ||
! Package | ! Package | ||
! Binary | ! Binary | ||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
! Parabola | ! Parabola | ||
Line 50: | Line 46: | ||
| /usr/bin/qemu-arm-static | | /usr/bin/qemu-arm-static | ||
|} | |} | ||
+ | |||
+ | For Guix it was tested on Guix system with qemu:static but '/debootstrap/debootstrap --second-stage' didn't work without having the [https://guix.gnu.org/en/manual/devel/en/html_node/Virtualization-Services.html#Transparent-Emulation-with-QEMU Transparent Emulation with QEMU] enabled. Once enabled it worked fine. As for running Guix on top of Parabola with systemd, you need to install qemu-user-static-binfmt and enable systemd-binfmt.service like explained in the [https://wiki.parabola.nu/ARM_Installation_Guide#Prepare_your_host_system Parabola ARM installation guide] for it to work. | ||
You can then start installing Trisquel on an ARM computer (from an x86 computer with Guix, Parabola or Trisquel) with the following commands: | You can then start installing Trisquel on an ARM computer (from an x86 computer with Guix, Parabola or Trisquel) with the following commands: | ||
# qemu-img create -f raw storage.img 2G | # qemu-img create -f raw storage.img 2G | ||
− | # | + | # echo 'start=2048,type=83' | sfdisk storage.img # This creates 1 partition. |
# udisksctl loop-setup -f storage.img | # udisksctl loop-setup -f storage.img | ||
# mkdir rootfs | # mkdir rootfs | ||
Line 69: | Line 67: | ||
If you use Guix instead (either as system distribution or on top of another distribution) you can use the following commands instead: | If you use Guix instead (either as system distribution or on top of another distribution) you can use the following commands instead: | ||
− | + | # sed 's#/gnu/store/.*/bin/sh#/bin/sh#g' -i rootfs/debootstrap/debootstrap | |
− | + | # sed 's#/gnu/store/.*/bin/dpkg#/usr/bin/dpkg#g' -i rootfs/debootstrap/debootstrap | |
− | # LANG=C.UTF-8 chroot rootfs | + | # LANG=C.UTF-8 chroot rootfs /bin/bash |
# export TERM=xterm-color | # export TERM=xterm-color | ||
# export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin | # export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin | ||
− | |||
− | |||
# /debootstrap/debootstrap --second-stage | # /debootstrap/debootstrap --second-stage | ||
Latest revision as of 17:18, 9 April 2024
Contents
Trisquel versions
Version | Can be debootstrapped | Based on | Kernel version | Comments |
---|---|---|---|---|
Trisquel 11 (aramo) | Yes | Ubuntu 22.04 LTS (Jammy Jellyfish) |
|
|
Trisquel 10 (nabia) | Yes | Ubuntu 20.04 LTS (Focal Fossa) |
|
Installing
How to install Trisquel 10 (etiona) on 32bit ARM SBCs
This tutorial has been tested on Parabola x86_64, but it should work on Trisquel too as they both have similar qemu-user-static packages.
Distribution | Package | Binary |
---|---|---|
Parabola | qemu-user-static | /usr/bin/qemu-arm-static |
Trisquel 11.0 (aramo) | qemu-user-static | /usr/bin/qemu-arm-static |
For Guix it was tested on Guix system with qemu:static but '/debootstrap/debootstrap --second-stage' didn't work without having the Transparent Emulation with QEMU enabled. Once enabled it worked fine. As for running Guix on top of Parabola with systemd, you need to install qemu-user-static-binfmt and enable systemd-binfmt.service like explained in the Parabola ARM installation guide for it to work.
You can then start installing Trisquel on an ARM computer (from an x86 computer with Guix, Parabola or Trisquel) with the following commands:
# qemu-img create -f raw storage.img 2G # echo 'start=2048,type=83' | sfdisk storage.img # This creates 1 partition. # udisksctl loop-setup -f storage.img # mkdir rootfs # mkfs.ext4 -O ^metadata_csum -O ^64bit /dev/loop0p1 # mount /dev/loop0p1 rootfs # mkdir -p rootfs/usr/bin # debootstrap --foreign --arch armhf etiona rootfs
Then if you use Parabola or Trisquel, you need to run the following commands:
# cp /usr/bin/qemu-arm-static rootfs/usr/bin # LANG=C.UTF-8 chroot rootfs /usr/bin/qemu-arm-static /bin/bash # export TERM=xterm-color # export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin # /debootstrap/debootstrap --second-stage
If you use Guix instead (either as system distribution or on top of another distribution) you can use the following commands instead:
# sed 's#/gnu/store/.*/bin/sh#/bin/sh#g' -i rootfs/debootstrap/debootstrap # sed 's#/gnu/store/.*/bin/dpkg#/usr/bin/dpkg#g' -i rootfs/debootstrap/debootstrap # LANG=C.UTF-8 chroot rootfs /bin/bash # export TERM=xterm-color # export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin # /debootstrap/debootstrap --second-stage
You then need to create the extlinux.conf file in /boot/extlinux/extlinux.conf with the following content:
menu title Welcome to U-Boot with Extlinux support! timeout 10 label Trisquel GNU/Linux-libre, linux-libre kernel kernel /boot/vmlinuz append loglevel=8 root=/dev/mmcblk0p1 rw fdtdir /boot/dtb/ initrd /boot/initrd.img
Set the first partition to be bootable (needed to be able to boot):
# sfdisk /dev/loop0 -A 1
Then you need to install a kernel:
# for d in proc dev dev/pts sys ; do mount -o bind /$d rootfs/$d ; done # LANG=C.UTF-8 chroot rootfs /usr/bin/qemu-arm-static /bin/bash # source /etc/environment # apt remove flash-kernel # apt install linux-image-generic
You then need to write a script in /etc/kernel/postinst.d/zz-generate-dtb-link to generate a symlink from /lib/firmware/<<your-kernel-version>>/device-tree/ to /boot/dtb, so for instance from /lib/firmware/5.4.0-96-generic/device-tree/ to /boot/dtb. I've an incomplete script here:
#!/bin/sh set -e version="$1" ln -sf /lib/firmware/${version}/device-tree/ /boot/dtb
The caveat of this script is that it has not been tested with multiple kernel versions installed, so during apt upgrade, it may or may not make the /boot/dtb link point to the wrong kernel. So that needs to be tested.
With only one kernel installed it should not be a problem.
In addition to that you will also need to make the symlink yourself the first time, before booting the image, like that:
# LANG=C.UTF-8 chroot rootfs /usr/bin/qemu-arm-static /bin/bash # source /etc/environment # ln -sf /lib/firmware/<your-kernel-version>/device-tree/ /boot/dtb
You will need to replace the <your-kenrel-version> with your kenrel version, for instance:
# LANG=C.UTF-8 chroot rootfs /usr/bin/qemu-arm-static /bin/bash # source /etc/environment # ln -sf /lib/firmware/5.4.0-96-generic/device-tree/ /boot/dtb
You will then need to install a bootloader, here's an example for the lime 1 A20:
# LANG=C.UTF-8 chroot rootfs /usr/bin/qemu-arm-static /bin/bash # source /etc/environment # apt update # apt install u-boot-sunxi # cat /usr/share/doc/u-boot-sunxi/README.Debian # dd conv=fsync,notrunc if=/usr/lib/u-boot/A20-OLinuXino-Lime/u of=/dev/loop0 bs=1024 seek=8
You can then unmount and copy to a microSD:
# umount rootfs/dev/pts rootfs/dev rootfs/proc rootfs/sys rootfs/ # ddrescue /dev/loop0 /dev/sdZ # copy to a microSD
Failed installation With Trisquel 10 (nabia)
- Devices with an Allwiner SOCs: missing devicetree.
- Devices with OMAP3 SOC: the package instructions / README use dd but u-boot.img is probably expected on a fat partition. And u-boot determine that due to some bug. See Parabola patches for more details. Tested with a beagleboard (probably one of the latest revisions) and MLO complained about not finding u-boot.img
- On a Pandaboard, it booted the kernel, dtb and initramfs fine, but then the kernel hangs (there are too much backtraces to see where the issue comes from).
- The TBS2910 is also supported by upstream u-boot but there I coudn't test since u-boot-img 2019.07+dfsg-1ubuntu6 doesn't have an image for it. Maybe support for DISTRO_BOOT was added upstream after that u-boot version.