diff options
author | Aleksei <email@email.email> | 2022-07-14 17:27:45 +0300 |
---|---|---|
committer | Aleksei <email@email.email> | 2022-07-14 17:27:45 +0300 |
commit | 678b1af0dcb8315ca9d96bf8d24eb8732ace7a26 (patch) | |
tree | 9ad2f186201fd3584afa02684b0e316f8f099da8 /content/post |
Diffstat (limited to 'content/post')
-rw-r--r-- | content/post/address-books-hosting.en.blogc | 73 | ||||
-rw-r--r-- | content/post/bsd-on-cubieboard1.en.blogc | 63 | ||||
-rw-r--r-- | content/post/debian-on-cubieboard1.en.blogc | 26 | ||||
-rw-r--r-- | content/post/libre-pc-hw-selection.en.blogc | 107 | ||||
-rw-r--r-- | content/post/u-boot-2022.04-rockpro64.en.blogc | 32 | ||||
-rw-r--r-- | content/post/u-boot-arch-rockpro64.en.blogc | 138 |
6 files changed, 439 insertions, 0 deletions
diff --git a/content/post/address-books-hosting.en.blogc b/content/post/address-books-hosting.en.blogc new file mode 100644 index 0000000..a8aa56c --- /dev/null +++ b/content/post/address-books-hosting.en.blogc @@ -0,0 +1,73 @@ +TITLE: Self-hosting address books +DATE: 2022-01-19 +TAGS: archlinuxarm archlinux software carddav addressbook freesoftware +------------------------- +I wanted to self-host a server to sync my contacts across devices. One that uses +an open protocol (CardDAV) and easy to self-host. +[Radicale](https://radicale.org) was very easy to set up on Arch, but +[davx5](https://www.davx5.com) client (Android) couldn't sync the changes. +[Xandikos](https://xandikos.org) works flawlessly in combination with nginx. The +package is in Arch repos but required some assembly: + + # (as root) + mkdir /var/lib/xandikos /etc/xandikos + chown xandikos:xandikos /var/lib/xandikos + useradd -U -s /usr/bin/nologin xandikos + htpasswd -c /etc/xandikos/htpasswd usr + +`/etc/systemd/system/xandikos.service`, ugly hack here because Xandikos can't +use an existing socket: + + [Unit] + Description=Xandikos CalDAV/CardDAV server + After=network.target + [Install] + WantedBy=multi-user.target + [Service] + RuntimeDirectory=xandikos + RuntimeDirectoryMode=0770 + User=xandikos + Group=http + ExecStart=/usr/bin/xandikos \ + -d /var/lib/xandikos \ + --current-user-principal=/usr \ + -l /run/xandikos/socket + ExecStartPost=/usr/bin/sh -c 'sleep 2; chmod g+w /run/xandikos/socket' + Restart=on-failure + KillSignal=SIGQUIT + Type=simple + +`/etc/nginx/sites-available/xandikos`: + + upstream xandikos { + server unix:/run/xandikos/socket; # nginx will need write permissions here + } + server { + server_name home-dav; + # Service discovery, see RFC 6764 + location = /.well-known/caldav { + return 307 $scheme://$host/user/calendars; + } + location = /.well-known/carddav { + return 307 $scheme://$host/user/contacts; + } + location / { + proxy_set_header Host $http_host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_redirect off; + proxy_buffering off; + proxy_pass http://xandikos; + auth_basic "Login required"; + auth_basic_user_file /etc/xandikos/htpasswd; + } + listen 192.168.2.1:8099; + } + +Add this line to [nftables](https://wiki.archlinux.org/title/Nftables) ruleset +to allow sync on LAN only: + + tcp dport 8099 ip saddr { 192.168.2.0/24 } ip daddr 192.168.2.1 accept comment "Accept connections to xandikos behind nginx" + +To sync to local directories I use +[vdirsyncer](https://vdirsyncer.pimutils.org), on Android - davx5 (in +[F-Droid](https://f-droid.org) repos). diff --git a/content/post/bsd-on-cubieboard1.en.blogc b/content/post/bsd-on-cubieboard1.en.blogc new file mode 100644 index 0000000..e6d8c92 --- /dev/null +++ b/content/post/bsd-on-cubieboard1.en.blogc @@ -0,0 +1,63 @@ +TITLE: Installing BSDs on Cubieboard1 +DATE: 2022-05-29 +TAGS: pushoverlicense freebsd netbsd openbsd software freesoftware foss sbc cubieboard +------------------------- + +#### FreeBSD +* Download `SD Card Image` for `armv7/GENERICSD` from + [here](https://www.freebsd.org/where/), burn to SD card as usual +* This image does not contain a U-boot capable of booting Cubieboard1. I + couldn't figure out how to download FreeBSD packages without having FreeBSD + installed, but U-boot image for Cubieboard1 is available in [Parabola + repos](https://www.parabola.nu/packages/libre/armv7h/uboot4extlinux-cubieboard), + after unpacking write it to the same SD card with `dd + if=u-boot-sunxi-with-spl.bin conv=notrunc,sync of=/dev/sd_card_device bs=1k + seek=8`. More info [here](https://wiki.freebsd.org/arm/Allwinner/booting) +* Boot, go through installation wizard, reboot, log in. Out of the box, FreeBSD + takes 2.3Gb of space + + $ uname -srm + FreeBSD 13.1-RELEASE arm + +FreeBSD spoofed the MAC address for Cubieboard's builtin NIC for some reason. +Overall it works well - boots quickly, the usual shell work feels +snappy. + +#### NetBSD +* Download `armv7.img.gz` right from the [homepage](http://www.netbsd.org), + burn to SD card as usual +* Add U-boot, the command is slightly different from FreeBSD: `dd + if=u-boot-sunxi-with-spl.bin conv=sync of=/dev/sd_card_device bs=1k seek=8` + ([source](http://wiki.netbsd.org/ports/evbarm/allwinner/)) +* Download .tgz "sets" from + [here](https://cdn.netbsd.org/pub/NetBSD/NetBSD-9.2/evbarm-earmv7hf/binary/sets/), + place them on a `FAT` partition on a USB stick +* Insert both SD card and USB stick, boot. Mount the partition on USB stick. + An adventure in and of itself - [the name of the block device is different + across + commands](https://www.netbsd.org/docs/guide/en/chap-rmmedia.html#using-usb-flash-drives) + (`/dev/rsd0d`, `sd0` (not `/dev/sd0`), `/dev/rsd0e` and I don't remember what + I used for mounting) - see the link for details +* Run `sysinst` command, choose "Local directory", set the "Binary sets dir" to + mounted USB partition dir. Clear all the other text fields, otherwise it will + fail with some cryptic error. Choose "(Re-)Install additional sets" and + "Minimal install" +* Reboot, log in. Out of the box, NetBSD takes 2.2Gb of space + + $ uname -srm + NetBSD 9.2 evbarm + +NetBSD is significantly slower than FreeBSD (I/O operations, installing +packages, ssh logins etc). By default, the hostname is the one received from +DHCP server. NetBSD used the native MAC address of the builtin NIC, just +like Debian. + +#### OpenBSD +I followed the installation manual to get it onto the SD card and it sent the +board into a reboot loop with "DRAM init failure" error. I searched for it on +the web, didn't find any obvious solutions/workarounds, not really interested +in digging into it at the moment. + +--- +I want to use this board as a CI target, the `BSD` + `armv7hf` combination +should be exotic enough to catch portability issues. diff --git a/content/post/debian-on-cubieboard1.en.blogc b/content/post/debian-on-cubieboard1.en.blogc new file mode 100644 index 0000000..bcc8ab9 --- /dev/null +++ b/content/post/debian-on-cubieboard1.en.blogc @@ -0,0 +1,26 @@ +TITLE: Installing Debian stable on Cubieboard1 +DATE: 2022-05-28 +TAGS: debian gnu linux software freesoftware foss sbc cubieboard +------------------------- +It was tricky and required an SD card (2Gb or larger, to install Debian to) +and a USB stick to store the installation image. + +* Download CD or DVD iso image for `armhf` from + [here](https://www.debian.org/CD/), currently `debian-11.3.0-armhf-DVD-1.iso` +* Copy iso file to a partition on USB stick (I used `MBR` + `ext4`). Burning it + as usual for (GNU/)Linux distros did not work +* On this [page](https://www.debian.org/releases/stable/debian-installer/) go + `other images` -> `armhf` -> `hd-media` -> `SD-card-images`, download + `firmware.Cubieboard.img.gz`, `partition.img.gz`, + `README.concatenateable_images`, follow the 1-step instruction in the README + and `cat` resulting .img file to SD card device (e.g. `/dev/sdg`, not + `/dev/sdg1`) +* Insert both SD card and USB stick into Cubieboard1 and boot - it'll start the + installer from SD card, which will find and use the .iso image on USB + partition. In it, choose "Use entire disk" at partitioning step and point to + SD card - this will overwrite it with new partitions +* Go through the installation wizard, remove USB stick, reboot. Out of the box, + Debian takes 1.6Gb of space + + $ uname -srm + Linux 5.10.0-14-armmp armv7l diff --git a/content/post/libre-pc-hw-selection.en.blogc b/content/post/libre-pc-hw-selection.en.blogc new file mode 100644 index 0000000..3f59d11 --- /dev/null +++ b/content/post/libre-pc-hw-selection.en.blogc @@ -0,0 +1,107 @@ +TITLE: PC on Libre/Free Software: hardware selection, RockPro64 +DATE: 2021-11-11 +TAGS: aarch64 rockpro64 sbc hardware hw +------------------------- +I've been using a [libreboot](https://libreboot.org)-ed ThinkPad T500, but USB +system started to show its age - only one port works, and it's a random one on +each boot. + +Started to look for a replacement with these requirements: + +* Supported by Libre/Free Software - [linux-libre] + (https://www.fsfla.org/ikiwiki/selibre/linux-libre), upstream U-boot without + vendor blobs +* Ability to install OS to SATA/NVMe drive. SD/eMMC/USB are too + slow/unreliable +* Sharing Internet connection via twisted pair and WiFi +* Working Bluetooth +* Upstream software: linux-libre, U-boot. I don't want to install forks of + outdated versions. + +Main candidates: + +* [Blackbird](https://www.raptorcs.com/content/BK1B02/intro.html), POWER9 + CPU. Has a BMC, all firmware sources are available. Firmware for built-in + NIC is in development, described [here] + (https://wiki.raptorcs.com/wiki/BCM5719). Drawbacks are price and the fact + that you can't order it (logistical problems due to covid, [according to + Talospace] + (https://www.talospace.com/2021/02/blackbird-supply-chain-likely-to-improve.html)) +* [MNT Reform](https://mntre.com/reform). ARM64 laptop, no vendor blobs except + 16KiB one to initialize RAM. Shipping next year +* [RockPro64](https://wiki.pine64.org/wiki/ROCKPro64) - RK3399 SBC, 4G RAM, + good-enough CPU (2xA72 + 4xA53), PCIe x4, 4xUSB, 1xRJ-45 (1 Gbit/s). [Gentoo + approves](https://wiki.gentoo.org/wiki/PINE64_ROCKPro64) +* [Gigabyte GA-G41M-ES2L] + (https://www.gigabyte.com/Motherboard/GA-G41M-ES2L-rev-10) for + [libreboot treatment] + (https://libreboot.org/docs/hardware/ga-g41m-es2l.html) +* [HoneyComb LX2](https://developer.solid-run.com/knowledge-base/honeycomb-lx2k) + aarch64, 16 A72 cores, a full-fledged motherboard. More expensive than + RockPro64 (it has much more functionality). I couldn't find if it requires + vendor blobs, and it's not in U-boot repo (by name) + +I chose RockPro64. Pine64 sells a SATA card for it but it uses an ASM chip. +Judging by forum threads and my experience ASM chips are not reliable - my +mPCIe card on ASM1061 works with HDD but not SSD for some reason. Found [this +card](https://www.pc-adapter.net/product/874.html) - 4 ports, [Marvell +88SE9215] +(https://www.marvell.com/products/system-solutions/sata-controllers/pcie-2-sata-controllers.html) +chip, supported by Linux. Bluetooth and WiFi adapters that do not require +vendor blobs were found on [H-node](https://h-node.org) (an excellent +resource). + +Resulting BOM: + +* SATA controller PCE4SAT-M02 (PCIe) +* Bluetooth controller Asus BT400 (USB) +* WiFi D-Link DWA-126 (USB) - Access Point mode +* Ethernet D-Link Dub-E100 100Mbit/s (USB) - for ISP connection +* 2 USB hubs +* Chipset cooler Zalman ZM-NB32J - fits, here is an [old review] + (https://www.overclockersclub.com/reviews/zalmanzmnb32j) +* Aluminum box 155x85x120 mm +* Regular PC PSU (I already had one) + +DIY power connector Molex -> DC barrel: + +![power-molex-barrel.jpg](../../assets/power-molex-barrel.jpg) + +Bolted a small aluminum plate to SATA card to hold the cables: + + +![rockpro64-sata-1](../../assets/sata-1.jpg) + +*** + +![rockpro64-sata-2](../../assets/sata-2.jpg) + +*** + +More photos: + +![rockpro64-hw-2](../../assets/rockpro64-hw-hdmi.jpg) + +*** + +![rockpro64-hw-2](../../assets/rockpro64-hw-usb.jpg) + +*** + +![rockpro64-hw-2](../../assets/rockpro64-hw-2.jpg) + +*** + +![rockpro64-hw-3](../../assets/rockpro64-hw-3.jpg) + +*** + +![rockpro64-hw-4](../../assets/rockpro64-hw-4.jpg) + +*** + +![rockpro64-hw-5](../../assets/rockpro64-hw-5.jpg) + +*** + +Next up: installing U-boot and Arch Linux ARM. diff --git a/content/post/u-boot-2022.04-rockpro64.en.blogc b/content/post/u-boot-2022.04-rockpro64.en.blogc new file mode 100644 index 0000000..8f346a3 --- /dev/null +++ b/content/post/u-boot-2022.04-rockpro64.en.blogc @@ -0,0 +1,32 @@ +TITLE: Mainline U-Boot 2022.04 on RockPro64 - works from SD card +DATE: 2022-06-05 +TAGS: rockpro64 sbc u-boot aarch64 software +------------------------- +Had to downgrade gcc to version 11 on Arch ARM (otherwise ATF won't build), +then (using git repos): + + arm-trusted-firmware $ git checkout v2.7.0 + arm-trusted-firmware $ find . -name '*.bin' -exec rm -vf '{}' \; + arm-trusted-firmware $ make PLAT=rk3399 bl31 + arm-trusted-firmware $ cd ../u-boot + u-boot $ git checkout v2022.04 + u-boot $ make mrproper && make rockpro64-rk3399_defconfig + u-boot $ make BL31=../arm-trusted-firmware/build/rk3399/release/bl31/bl31.elf + +Create a GPT partition on SD card to hold boot files: + + /boot1GiBSD/ + ├── boot_arch + │ ├── dtbs/ + │ ├── Image + │ └── initramfs-linux.img + └─── extlinux + └── extlinux.conf + +Write U-boot image to the same SD card (it will not break GPT) - directions in +`doc/README.rockchip` in U-boot source tree, "Booting from an SD card on +RK3399", Option 3. Works fine. + +SPI flash doesn't work though, `sf probe` complains: + + unrecognized JEDEC id bytes: ff, ff, ff diff --git a/content/post/u-boot-arch-rockpro64.en.blogc b/content/post/u-boot-arch-rockpro64.en.blogc new file mode 100644 index 0000000..4a0d636 --- /dev/null +++ b/content/post/u-boot-arch-rockpro64.en.blogc @@ -0,0 +1,138 @@ +TITLE: RockPro64: booting OS from SATA, installing Arch ARM +DATE: 2021-11-17 +TAGS: rockpro64 sbc u-boot archlinuxarm aarch64 software +------------------------- +If U-boot problems with RockPro64 are fixed then most of this cumbersome setup +will become unnecessary and this article will get 5 times shorter. Right now it +might be easier to use [this](https://github.com/sigmaris/u-boot/) fork, author +claims SATA support (I didn't try it). I chose upstream U-boot to send bugs to +developers. + +Currently the `master` branch of U-boot has 2 problems with RockPro64 - SATA +doesn't start and the board is not booting since commit [3ae64582] +(https://source.denx.de/u-boot/u-boot/-/commit/3ae64582fb8ceead4fc464cd2055eb3eaef78ccc), +hangs after loading the kernel. [Wrote to developers] +(https://lists.denx.de/pipermail/u-boot/2021-November/466976.html) about the +second issue, there seems to be some interest. If it's fixed I'll report SATA +issue next. There is a +[patch with PCIe code from OpenBSD] +(https://github.com/sigmaris/u-boot/commit/c592735731642d299b25cef1329aad4d91d92e8c), +but the description is not encouraging. + +So right now booting upstream U-boot is rather tricky: + +* U-boot is on SD card +* There is a small flash drive in USB2 port with ext4 filesystem to store + `/extlinux/extlinux.conf`, kernel and initrd +* Other partitions (`/`, `swap`, `/home` etc) are on SATA devices + +Commands below are for Arch or Parabola on amd64. There are cross-compilation +packages in Arch repos - let's install them: + + # pacman -S arm-none-eabi-gcc aarch64-linux-gnu-gcc dtc + +Download latest ATF release (currently `arm_cca_v0.3`), remove binary files and +build: + + curl -O https://codeload.github.com/ARM-software/arm-trusted-firmware/tar.gz/refs/tags/arm_cca_v0.3 + tar -xzf arm_cca_v0.3 + cd arm-trusted-firmware-* + find . -name '*.bin' -exec rm -vf '{}' \; + make realclean + make CROSS_COMPILE=aarch64-linux-gnu- PLAT=rk3399 + cd .. + +Now we can build U-boot 2020.07, to boot from SD we need `u-boot-rockchip.bin`: + + curl -O https://ftp.denx.de/pub/u-boot/u-boot-2020.07.tar.bz2 + tar -xjf u-boot-2020.07.tar.bz2 + cd u-boot-2020.07/ + export BL31=../arm-trusted-firmware-*/build/rk3399/release/bl31/bl31.elf + export CROSS_COMPILE=aarch64-linux-gnu- CC=aarch64-linux-gnu-gcc + make mrproper + make rockpro64-rk3399_defconfig + make + +A convenient distro to get started is Armbian. Download Bullseye [from +here](https://www.armbian.com/rockpro64/), write it to SD card +(`/dev/sde` here, needs to be 4Gb or larger): + + unxz -dc Armbian_21.08.1_Rockpro64_bullseye_current_5.10.60.img.xz > /dev/sde + +Boot RockPro64 with it, download ArchLinux ARM "Generic" root tarball [from +here] (https://archlinuxarm.org/platforms/armv8/generic). Create a 20Gb +partition on SATA device, mount it to `/mnt`, unpack Arch there: + + tar -xzf ArchLinuxARM-aarch64-latest.tar.gz -C /mnt + +I wrote the following steps from memory, please contact me if something doesn't +work, I'll try to fix it. Mount the filesystem on USB flash drive to `/mnt_usb`, +move boot files from SATA to USB so that U-boot can see them: + + mkdir /mnt_usb/boot_arch + cp -r /mnt/boot/* /mnt_usb/boot_arch/ + lsblk --fs -oMOUNTPOINTS,UUID|awk '/^\/mnt_usb\s/ {print $2}' # UUID_USB, see below + +Add entries to `/etc/fstab`: 1) to mount the filesystem on USB and 2) to bind +the `boot_arch` directory on USB filesystem to `/boot` so that `pacman` uses it +during kernel upgrades: + + UUID=<UUID_USB> /bootUSB ext4 defaults,noatime 0 1 + /bootUSB/boot_arch /boot none bind 0 0 + +Add Arch boot entry to `extlinux/extlinux.conf` on USB filesystem using PARTUUID +of SATA partition (get it with `lsblk -o+PARTUUID`): + + timeout 60 + menu title Muh boot options + default Arch_Linux_SSD + + label Arch_Linux_SSD + kernel /boot_arch/Image + append root=PARTUUID=111111-1111-111 nowatchdog console=ttyS0,115200n8 console=tty1 rootwait rw earlyprintk LANG=en_US.UTF-8 + fdtdir /boot_arch/dtbs + initrd /boot_arch/initramfs-linux.img + +Write U-boot to SD card, if you have a spare one (any size) - use it so you will +still have a working one with Armbian. In this example SD card is `/dev/sde`, +**check it on your PC** with `lsblk`: + + dd if=/dev/zero of=/dev/sde bs=4096 count=2600 + dd if=/path/u-boot-git/u-boot-rockchip.bin of=/dev/sde seek=64 + sync + +Insert it into RockPro64, power on - if all went well you'll see U-boot 2020.07 +and Arch will boot from SSD. Add `pacman` Arch ARM keys as described [here] +(https://archlinuxarm.org/platforms/armv8/generic). + +Download `linux-libre-firmware` from [Parabola repo] +(https://www.parabola.nu/packages/libre/x86_64/linux-libre-firmware/), install +it instead of `linux-firmware`: + + RemoteFileSigLevel = Never # in /etc/pacman.conf + pacman -U https://www.parabola.nu/packages/libre/x86_64/parabola-keyring/download + RemoteFileSigLevel = Required DatabaseOptional # in /etc/pacman.conf + pacman -U linux-libre-firmware-1:1.4-1-any.pkg.tar.xz + +I added `-mtune=cortex-a72.cortex-a53` to `CFLAGS` in `/etc/makepkg.conf` so +GCC optimizes `makepkg`-built packages for this CPU architecture. + +What works: + +* Bluetooth (headphones) +* 1080p video playback +* WiFi 802.11n Access Point +* Sharing Internet connection via 1 Gbit/s cable (crossover) +* [Battle for Wesnoth](https://www.wesnoth.org/): it's a big project and it's + not in Arch ARM repos, so I decided to build it, see if it'll work on aarch64. + Works like a charm: `asp export wesnoth ; cd wesnoth ; sed -i + 's/^arch=.*/arch=(aarch64)/' PKGBUILD ; makepkg`, profit. Thanks to Wesnoth + developers for portable code. Made a thread about it on Arch ARM, if I have + time will make a github PR to add Wesnoth to *Community* repo, it looks simple + enough +* All the usual software I use on a home PC + +Next on the list - +[linux-libre](https://www.fsfla.org/ikiwiki/selibre/linux-libre/). I'll have to +either build it for Arch/aarch64 or switch to a distro where it's already +packaged. This will take some time. |