VisionFive 2 Debian Image Released

I just read your comments from other threads. HDMI worked for me (mine is 1920x1080) before I update it. Even I tried to update firmware, but it doesn’t helped. I should find out more or just wait for fixes. Anyways, thank you for information.

1 Like

Thanks for all the help on update && upgrade. Yesterday I installed more than 800 upgrades!

Now I have a question on Docker.

I have it installed:

Version: 20.10.23+dfsg1
API version: 1.41
Go version: go1.19.5
Git commit: 7155243
Built: Fri Jan 20 08:04:03 2023
OS/Arch: linux/riscv64
Context: default
Experimental: true

But I can’t get it running.

after executing:

sudo systemctl start docker
Job for docker.service failed because the control process exited with error code.
See “systemctl status docker.service” and “journalctl -xeu docker.service” for details.

and:

sudo systemctl status docker
× docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; preset: enabled)
Active: failed (Result: exit-code) since Tue 2023-02-07 05:58:29 UTC; 10s ago
TriggeredBy: × docker.socket
Docs: https://docs.docker.com
Process: 270690 ExecStart=/usr/sbin/dockerd -H fd:// --containerd=/run/containerd/containerd.s>
Main PID: 270690 (code=exited, status=1/FAILURE)
CPU: 419ms

Feb 07 05:58:29 rvsvrwsv02 systemd[1]: docker.service: Scheduled restart job, restart counter is a>
Feb 07 05:58:29 rvsvrwsv02 systemd[1]: Stopped docker.service - Docker Application Container Engin>
Feb 07 05:58:29 rvsvrwsv02 systemd[1]: docker.service: Start request repeated too quickly.
Feb 07 05:58:29 rvsvrwsv02 systemd[1]: docker.service: Failed with result ‘exit-code’.
Feb 07 05:58:29 rvsvrwsv02 systemd[1]: Failed to start docker.service - Docker Application Contain>
lines 1-14/14 (END)

I am stuck. Docker runs fine on my Visionfive 1 sbc under UBUNTU.

Does anybody have a tip?

Help appreciated!

I tried it on the debian image and there was a few things missing in the kernel.
Is this all the logs you get ? iirc there was a lot more detailed things it complained on when I messed around with it.
all the stuff between these two lines, run with journalctl -u docker -n 50:

Jan 26 12:19:21 starfive dockerd[8267]: time="2023-01-26T12:19:21.271999471Z" level=info msg="Starting up"
...
Jan 26 12:19:22 starfive dockerd[8267]:  (exit status 4))

Hello Knegge,

thanks for the tip. This is the result:

sudo journalctl -u docker -n 50
Feb 07 05:58:27 rvsvrwsv02 dockerd[270644]: time=“2023-02-07T05:58:27.661619622Z” level=info msg=“Waiting for containerd to be ready to restart event processing” module=libcontainerd namespace=moby
Feb 07 05:58:27 rvsvrwsv02 dockerd[270644]: failed to start daemon: Error initializing network controller: error obtaining controller instance: unable to add return rule in DOCKER-ISOLATION-STAGE-1 chain: (iptables f>
Feb 07 05:58:27 rvsvrwsv02 dockerd[270644]: (exit status 4))
Feb 07 05:58:27 rvsvrwsv02 systemd[1]: docker.service: Main process exited, code=exited, status=1/FAILURE
Feb 07 05:58:27 rvsvrwsv02 systemd[1]: docker.service: Failed with result ‘exit-code’.
Feb 07 05:58:27 rvsvrwsv02 systemd[1]: Failed to start docker.service - Docker Application Container Engine.
Feb 07 05:58:27 rvsvrwsv02 systemd[1]: docker.service: Scheduled restart job, restart counter is at 2.
Feb 07 05:58:27 rvsvrwsv02 systemd[1]: Stopped docker.service - Docker Application Container Engine.
Feb 07 05:58:27 rvsvrwsv02 systemd[1]: Starting docker.service - Docker Application Container Engine…
Feb 07 05:58:28 rvsvrwsv02 dockerd[270690]: time=“2023-02-07T05:58:28.146321796Z” level=info msg=“Starting up”
Feb 07 05:58:28 rvsvrwsv02 dockerd[270690]: time=“2023-02-07T05:58:28.150123347Z” level=info msg=“[core] parsed scheme: "unix"” module=grpc
Feb 07 05:58:28 rvsvrwsv02 dockerd[270690]: time=“2023-02-07T05:58:28.150223848Z” level=info msg=“[core] scheme "unix" not registered, fallback to default scheme” module=grpc
Feb 07 05:58:28 rvsvrwsv02 dockerd[270690]: time=“2023-02-07T05:58:28.150335099Z” level=info msg=“[core] ccResolverWrapper: sending update to cc: {[{unix:///run/containerd/containerd.sock 0 }] }>
Feb 07 05:58:28 rvsvrwsv02 dockerd[270690]: time=“2023-02-07T05:58:28.150418601Z” level=info msg=”[core] ClientConn switching balancer to "pick_first"" module=grpc
Feb 07 05:58:28 rvsvrwsv02 dockerd[270690]: time=“2023-02-07T05:58:28.150477851Z” level=info msg=“[core] Channel switches to new LB policy "pick_first"” module=grpc
Feb 07 05:58:28 rvsvrwsv02 dockerd[270690]: time=“2023-02-07T05:58:28.150605853Z” level=info msg=“[core] Subchannel Connectivity change to CONNECTING” module=grpc
Feb 07 05:58:28 rvsvrwsv02 dockerd[270690]: time=“2023-02-07T05:58:28.150736355Z” level=info msg=“[core] Subchannel picks a new address "unix:///run/containerd/containerd.sock" to connect” module=grpc
Feb 07 05:58:28 rvsvrwsv02 dockerd[270690]: time=“2023-02-07T05:58:28.151381613Z” level=info msg=“[core] Channel Connectivity change to CONNECTING” module=grpc
Feb 07 05:58:28 rvsvrwsv02 dockerd[270690]: time=“2023-02-07T05:58:28.151982621Z” level=info msg=“[core] Subchannel Connectivity change to READY” module=grpc
Feb 07 05:58:28 rvsvrwsv02 dockerd[270690]: time=“2023-02-07T05:58:28.152101623Z” level=info msg=“[core] Channel Connectivity change to READY” module=grpc
Feb 07 05:58:28 rvsvrwsv02 dockerd[270690]: time=“2023-02-07T05:58:28.153711644Z” level=info msg=“[core] parsed scheme: "unix"” module=grpc
Feb 07 05:58:28 rvsvrwsv02 dockerd[270690]: time=“2023-02-07T05:58:28.153788645Z” level=info msg=“[core] scheme "unix" not registered, fallback to default scheme” module=grpc
Feb 07 05:58:28 rvsvrwsv02 dockerd[270690]: time=“2023-02-07T05:58:28.153891397Z” level=info msg=“[core] ccResolverWrapper: sending update to cc: {[{unix:///run/containerd/containerd.sock 0 }] }>
Feb 07 05:58:28 rvsvrwsv02 dockerd[270690]: time=“2023-02-07T05:58:28.153961897Z” level=info msg=”[core] ClientConn switching balancer to "pick_first"" module=grpc
Feb 07 05:58:28 rvsvrwsv02 dockerd[270690]: time=“2023-02-07T05:58:28.154018148Z” level=info msg=“[core] Channel switches to new LB policy "pick_first"” module=grpc
Feb 07 05:58:28 rvsvrwsv02 dockerd[270690]: time=“2023-02-07T05:58:28.154108649Z” level=info msg=“[core] Subchannel Connectivity change to CONNECTING” module=grpc
Feb 07 05:58:28 rvsvrwsv02 dockerd[270690]: time=“2023-02-07T05:58:28.154209901Z” level=info msg=“[core] Subchannel picks a new address "unix:///run/containerd/containerd.sock" to connect” module=grpc
Feb 07 05:58:28 rvsvrwsv02 dockerd[270690]: time=“2023-02-07T05:58:28.154834409Z” level=info msg=“[core] Channel Connectivity change to CONNECTING” module=grpc
Feb 07 05:58:28 rvsvrwsv02 dockerd[270690]: time=“2023-02-07T05:58:28.155044912Z” level=info msg=“[core] Subchannel Connectivity change to READY” module=grpc
Feb 07 05:58:28 rvsvrwsv02 dockerd[270690]: time=“2023-02-07T05:58:28.155119663Z” level=info msg=“[core] Channel Connectivity change to READY” module=grpc
Feb 07 05:58:28 rvsvrwsv02 dockerd[270690]: time=“2023-02-07T05:58:28.863688052Z” level=info msg=“[graphdriver] using prior storage driver: overlay2”
Feb 07 05:58:28 rvsvrwsv02 dockerd[270690]: time=“2023-02-07T05:58:28.886353353Z” level=warning msg=“Unable to find memory controller”
Feb 07 05:58:28 rvsvrwsv02 dockerd[270690]: time=“2023-02-07T05:58:28.886459354Z” level=warning msg=“Unable to find io controller”
Feb 07 05:58:28 rvsvrwsv02 dockerd[270690]: time=“2023-02-07T05:58:28.886532605Z” level=warning msg=“Unable to find cpuset controller”
Feb 07 05:58:28 rvsvrwsv02 dockerd[270690]: time=“2023-02-07T05:58:28.886601606Z” level=warning msg=“Unable to find pids controller”
Feb 07 05:58:28 rvsvrwsv02 dockerd[270690]: time=“2023-02-07T05:58:28.887742121Z” level=info msg=“Loading containers: start.”
Feb 07 05:58:28 rvsvrwsv02 dockerd[270690]: time=“2023-02-07T05:58:28.900252287Z” level=warning msg=“Running modprobe bridge br_netfilter failed with message: modprobe: WARNING: Module bridge not found in directory /l>
Feb 07 05:58:29 rvsvrwsv02 dockerd[270690]: time=“2023-02-07T05:58:29.238473018Z” level=info msg=”[core] Channel Connectivity change to SHUTDOWN" module=grpc
Feb 07 05:58:29 rvsvrwsv02 dockerd[270690]: time=“2023-02-07T05:58:29.238834523Z” level=info msg=“[core] Subchannel Connectivity change to SHUTDOWN” module=grpc
Feb 07 05:58:29 rvsvrwsv02 dockerd[270690]: time=“2023-02-07T05:58:29.240252542Z” level=info msg=“stopping event stream following graceful shutdown” error=“” module=libcontainerd namespace=moby
Feb 07 05:58:29 rvsvrwsv02 dockerd[270690]: failed to start daemon: Error initializing network controller: error obtaining controller instance: unable to add return rule in DOCKER-ISOLATION-STAGE-1 chain: (iptables f>
Feb 07 05:58:29 rvsvrwsv02 dockerd[270690]: (exit status 4))
Feb 07 05:58:29 rvsvrwsv02 systemd[1]: docker.service: Main process exited, code=exited, status=1/FAILURE
Feb 07 05:58:29 rvsvrwsv02 systemd[1]: docker.service: Failed with result ‘exit-code’.
Feb 07 05:58:29 rvsvrwsv02 systemd[1]: Failed to start docker.service - Docker Application Container Engine.
Feb 07 05:58:29 rvsvrwsv02 systemd[1]: docker.service: Scheduled restart job, restart counter is at 3.
Feb 07 05:58:29 rvsvrwsv02 systemd[1]: Stopped docker.service - Docker Application Container Engine.
Feb 07 05:58:29 rvsvrwsv02 systemd[1]: docker.service: Start request repeated too quickly.
Feb 07 05:58:29 rvsvrwsv02 systemd[1]: docker.service: Failed with result ‘exit-code’.
Feb 07 05:58:29 rvsvrwsv02 systemd[1]: Failed to start docker.service - Docker Application Container Engine.

As a relative newby to linux it seems to me that Docker is unable to create a bridge for networking.

Any tricks I can apply now? Or just be patient until it is fixed?

Hello together,

during the update i got the question to update u-boot config and other config please say NO.
Then the upgrade works and debian starts.

Damian

2 Likes

The journalctl was truncated a bit, but not too important. If you want the full rows then add --no-pager to the command.

This is the main issue so far, and it is related to the kernel and modules available.
“Running modprobe bridge br_netfilter failed with message: modprobe: WARNING: Module bridge not found in directory /l"

When I got docker running I used this build-script in the cross-compiler. Either try using the config from it (did not work for me back then) or just build that one and try it out. Remember to also bring the modules over to it, not only the kernel.
You can simply follow the guide here.

Hello Knegge,

thanks for the help.

(cross)compiling my own kernel goes way beyond my knowledge/experience, so I will have to be patient :wink:

Thank you for this guide! It worked perfectly and saved a ton of time over trying to get TFTP set up.

6 Likes

In the repo that script is located, is a very simple way to do it on almost any system. I encourage you to try the podman route. The nice thing with containerized solutions is that it is not depending or modifying the host system itself, so quite reliably does exactly what is promised (:

2 Likes

Waiting for the next image, I wanted to ask what is the reason for not including a swap partition.

at least in my case after loading the image 69 correctly I don’t see the swap partition.

1 Like

Ignoring wear-and-tear issues on the device, having a SD card based swap is horrible due to it being very slow, for many SBC and desktop use-cases it’s better to have the system OOM (trigger an Out Of Memory event and kill the offending process) than bog the whole machine down to nothing as swapping overwhelms up the disk and memory resources.

For servers you absolutely do want some swap to provide a buffer and allow inactive processes to suspend into swap. My Pi3’s all have 1Gb of swap configured for this reason.

But the netbook I’m using now and my Pi4 desktop have no swap, The last oom on this 8gb netbook was when I had Chrome, KiCAD and Inkscape open, then tried to render a big model in OpenSCAD… ymmv.

edit: forgot to say that if you are setting up an NVMe from scratch, not expanding the / partition to the whole disk, and adding a small swap after it is a good idea.

1 Like

The problem with docker on the debian image is with iptables / netfliter ie firewall rules.
I’m not sure myself but I think the kernel is in sync with the user space tools.
Th work around is to get debian to use the old tools to configure the firewall.
update-alternatives --set iptables /usr/sbin/iptables-legacy

Lots of good info in this thread, thanks!

I can confirm that the apt GPG error is fixed if you update sources.list and take the 800+ updated packages, and: keep your existing u-boot config.

I’m having the “HDMI stopped working” bug that others posted about. Looks like the upgrade did not touch my lightdm.conf so it’s not that. Did anyone have any luck bringing HDMI back online after the update?

Try this: Experimental debian sid image , works like a charm e (even in 4K mode).

1 Like

Does anyone know the content of the 16 MiB partition 1? The official Debian images from StarFive contain it and the experimental images above create it as well, but as far as I can see leaves it empty: imagebuilder/gpt-partitions.txt at main · hexdump0815/imagebuilder · GitHub

Since the VisionFive 2 has an SPI bootloader, that first partition does not contain U-Boot, or at least it wouldn’t be required then, is it?

I’m trying to create own images, running the kernel builds from StarFive and leaving SPI bootloader untouched, resp. upgraded from official U-Boot builds. Does anyone know the requirements?

  • GPT partition table or does MBR work as well?
  • Do uEnv.txt and extlinux need to be located on a FAT partition, or does ext4 work as well?
  • I hope it works with a single ext4 partition, as FAT is not really supported by dpkg, causing issues on Debian when reinstalling/upgrading the kernel package.
1 Like

Right now it is empty to the best of my knowledge. The partition schema is mainly due to the current u-boot environment.

Not exactly, but the only real requirement for what you do is to have a UART connection. Everything else is quite harmless and has a good chance to work with minimal adjustments.

You find more details about your questions in https://u-boot.readthedocs.io/en/latest/develop/distro.html.

2 Likes

i tried to omit it when i created my experimental debian sid image and then it did not boot - my assumption was that it is maybe used to store the u-boot env, but i did not yet look into the u-boot source …

1 Like

I first tried an image with a single MBR ext4 partition, extlinux and the uEnv.txt below /boot directory, just like the images are shipped with, and with a content which worked fine on the official image as well. This did not boot.

Then I tried the same with a GPT partition scheme, and it did still not boot.

Left differences are that uEnv.txt and extlinux are on the first partition, instead of on the second one (since I omitted the 16 MiB partition), and that those are on an ext4 partition (instead of FAT). I’m hoping very much that FAT is no requirement, as this makes DEB packaging complicated and messy. Probably the official/default U-Boot on SPI checks for boot configs only on the second partition, or on a partition with a specific offset?

I’ll try it with an image with a single partition starting at 17 MiB offset, and if this does not work with the empty 16 MiB partition.

What makes things a little difficult is that I don’t have the SBC here, but a team member instead who has no UART adapter, so we have no way to see U-Boot logs currently. However, the LEDs tell quite much and our images setup network and spin up an SSH server automatically. UART adapter will be ordered now, which will surely reveal more details.

find below a procedure for your friend to access at least the u-boot env.

The most relevant part of the boot env for you is i think:

bootcmd=run load_vf2_env;run importbootenv;run load_distro_uenv;run boot2;run distro_bootcmd
bootcmd_distro=run fdt_loaddtb; run fdt_sizecheck; run set_fdt_distro; sysboot mmc ${fatbootpart} fat c0000000 ${bootdir}/${boot_syslinux_conf};
fatbootpart=1:2

I.e. partition 2 must be fat.

1 Like