Group: Hardware/FSDG distributions/Trisquel
(→How to install Trisquel 10 (etiona) on 32bit ARM SBCs: switch to lime1 A20 due to a bug in debian and limitation in u-boot: it looks for the second stage on a partition.) |
(→How to install Trisquel 10 (etiona) on 32bit ARM SBCs: clarify sentense.) |
||
(19 intermediate revisions by 2 users not shown) | |||
Line 8: | Line 8: | ||
! Kernel version | ! Kernel version | ||
! Comments | ! Comments | ||
+ | |- | ||
+ | | Trisquel 11 (aramo) | ||
+ | | {{yes}} | ||
+ | | Ubuntu 22.04 LTS (Jammy Jellyfish) | ||
+ | | | ||
+ | * 5.15 | ||
|- | |- | ||
| Trisquel 10 (nabia) | | Trisquel 10 (nabia) | ||
Line 25: | Line 31: | ||
{{stub}} | {{stub}} | ||
− | + | 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. | |
− | |||
− | |||
− | + | {| class="wikitable" border="1" | |
+ | ! 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 [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: | ||
# 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 38: | Line 58: | ||
# mkdir -p rootfs/usr/bin | # mkdir -p rootfs/usr/bin | ||
# debootstrap --foreign --arch armhf etiona rootfs | # 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 | # cp /usr/bin/qemu-arm-static rootfs/usr/bin | ||
− | # LANG=C.UTF-8 chroot rootfs qemu-arm-static /bin/bash | + | # 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 TERM=xterm-color | ||
+ | # export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin | ||
# /debootstrap/debootstrap --second-stage | # /debootstrap/debootstrap --second-stage | ||
Line 53: | Line 84: | ||
fdtdir /boot/dtb/ | fdtdir /boot/dtb/ | ||
initrd /boot/initrd.img | 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: | Then you need to install a kernel: | ||
# for d in proc dev dev/pts sys ; do mount -o bind /$d rootfs/$d ; done | # for d in proc dev dev/pts sys ; do mount -o bind /$d rootfs/$d ; done | ||
− | # LANG=C.UTF-8 chroot rootfs qemu-arm-static /bin/bash | + | # LANG=C.UTF-8 chroot rootfs /usr/bin/qemu-arm-static /bin/bash |
# source /etc/environment | # source /etc/environment | ||
# apt remove flash-kernel | # apt remove flash-kernel | ||
Line 74: | Line 108: | ||
In addition to that you will also need to make the symlink yourself the first time, before booting the image, like that: | 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 qemu-arm-static /bin/bash | + | # LANG=C.UTF-8 chroot rootfs /usr/bin/qemu-arm-static /bin/bash |
# source /etc/environment | # source /etc/environment | ||
# ln -sf /lib/firmware/<your-kernel-version>/device-tree/ /boot/dtb | # 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: | You will need to replace the <your-kenrel-version> with your kenrel version, for instance: | ||
− | # LANG=C.UTF-8 chroot rootfs qemu-arm-static /bin/bash | + | # LANG=C.UTF-8 chroot rootfs /usr/bin/qemu-arm-static /bin/bash |
# source /etc/environment | # source /etc/environment | ||
# ln -sf /lib/firmware/5.4.0-96-generic/device-tree/ /boot/dtb | # 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: | You will then need to install a bootloader, here's an example for the lime 1 A20: | ||
− | # LANG=C.UTF-8 chroot rootfs qemu-arm-static /bin/bash | + | # LANG=C.UTF-8 chroot rootfs /usr/bin/qemu-arm-static /bin/bash |
# source /etc/environment | # source /etc/environment | ||
# apt update | # apt update | ||
Line 93: | Line 127: | ||
# umount rootfs/dev/pts rootfs/dev rootfs/proc rootfs/sys rootfs/ | # umount rootfs/dev/pts rootfs/dev rootfs/proc rootfs/sys rootfs/ | ||
# ddrescue /dev/loop0 /dev/sdZ # copy to a microSD | # 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. | ||
== References == | == References == | ||
<references/> | <references/> |
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.