Gobolinux boot with S6 init and 66 tools

Hello everybody

I’m Yann-Kaelig and I would like to show you the result of a week of works to boot Gobolinux with S6 init and the 66 tools. There is still a lot of work to be done to get something usable in production.

I am having some problems during the execution of the boot which only allows me for the moment to have access to tty12 to accomplish debugging tasks.

I will see with my knowledge what I can fix but whatever happens I intend to share in the coming days all of my work, my notes, Recipes, Build logs, Packages and Issues :slight_smile:

It looks pretty promising overall, it puts me in a good mood and I wanted to share this exciting moment with you.

Some links to start with S6 and 66:
Skarnet Softwares docs ( S6 - S6-rc … )
Obarun (Eric) Softwares docs ( 66 - 66-tools … )

66 Git Source files
66-tools Git Source files
Oblibs Git Source files

Back to work now.


Well, it’s better now, I can get a login from tty1.

Fixed sysctl crash at boot looking for /etc/sysctl.conf which is not available on Gobolinux.
A quick fix was to create this file.

Since things seem to be going in the right direction now it’s time to share all my work and I also intend to offer a vdi and a raw image as a bonus. A common base to work on for debugging and improvements.

Gobolinux boot with S6 init and 66 tools


Rather calm on this Sunday in my work. New discoveries, BootScripts and BootOptions which are no longer useful now, however their content allows me to understand a little better how the system works.

Finally I have remote ssh access, something that didn’t work with StartTask. I created the Ssh service and it works now as you can see on the screenshots. On this first screenshot, I created a new system tree with the command line

66-tree -nEc system

then I enabled the service

66-enable -t system sshd

and finally I started the service

66-start -t system sshd

The -t system option is not mandatory in our case because the tree during its creation has been defined as being the Current tree we are working on, and the last two commands can be summed up with

66-enable -S sshd

On this second screenshot you can see how the symbolic links look like for each services and how a service file ( here sshd ) look like.

The issues I face now:

  • Symbolic links need to be created manually, at compile time I have to pass the option –symlink no because otherwise there is a strange behavior, given that different programs and services share the same path /usr/share/66/service

  • Service file ( here for example with sshd ) contains the path with the version number of the software which mean at each update or removal the service file must be updated and re-enabled to apply the change.

Note that sixtysix will first search for service in /etc/66/service and then in /usr/share/66/service.
For example, I want to modify a service provided by upstream packagers, I just need to copy it from /usr/share/66/service to /etc/66/service with my modification and re-enable it to take the changes into account.

That’s all for today, have a nice day/night.

1 Like

Good job!

SymlinkProgram should take care of creating symlinks for you under /System/Index/share/66/service – as long as Compile installs the program files under /Programs/Foo/Version/share/66/service. Could you clarify the installation process that requires a manual symlink creation?

Hello lucasvr and everybody.

I took some time this week to learn more about Gobolinux reading the wiki. English is not my native language, so I still have a lot of things to understand and for now I mainly help myself with existing recipes to roughly understand the thing.

I am now sharing part of my work, a number of services are still missing from the git repository which allow the system to boot but before finishing this work I would like to solve my issues.

Gobolinux S6init, 66Tools and Services Recipes

So let’s get to the facts with some screenshot to help to understand the issues.

This first screenshot is how /Programs/Service-Boot looks like after a compilation and installation.

This second screenshot is how /Programs/Service-ConsoleTracker looks like after a compilation and installation with the issue I’m going to explain.

The wrong thing here is the lack of /Programs/Service-ConsoleTracker/0.2.1/share folder and should contains 66/service/console-tracker@

The thing I understand is because share/66 is linked to the program Service-Boot everything that should have been in /Programs/Service-ConsoleTracker/0.2.1/share/66/service is now under /Programs/Service-Boot/2.3.1/share/66/service and this is not good.

Which introduces another issue when removing Service-ConsoleTracker with RemoveProgram as you can see on this third screenshot. Program Service-ConsoleTracker has been removed but the service file still exist in /Programs/Service-Boot/2.3.1/share/66/service and it’s not good.

This is why in my first test I had to use –symlink no during the compilation of Service-Boot and Service-ConsoleTracker, next manually create the folders /System/Index/share/66/{module,script,service} and finally manually create the symlinks for:

Service-Boot program like that:

ln -s /Programs/Service-Boot/2.3.1/share/66/module/boot@ /System/Index/share/66/module/
ln -s /Programs/Service-Boot/2.3.1/share/66/script/crypt.awk /System/Index/share/66/script/
ln -s /Programs/Service-Boot/2.3.1/share/66/script/modules.sh /System/Index/share/66/script/
ln -s /Programs/Service-Boot/2.3.1/share/66/script/tmpfiles.sh /System/Index/share/66/script/
ln -s /Programs/Service-Boot/2.3.1/share/66/service/boot@ /System/Index/share/66/service/

Service-ConsoleTracker like that:

ln -s /Programs/Service-Consoletracker/0.2.1/share/66/service/console-tracker@ /System/Index/share/66/service/

I’m pretty sure it should be possible to fix this issue in the recipe, maybe using pre_link () ? but right now I have no idea how to do it.


Well, the first step is done. I found a trick to get every files linked with the right Program path. In theory it looks good, it’s time to do some test.

66Tools Git Recipes Update

1 Like


So, it’s working with a slight manual intervention, which means that I have done something wrong somewhere.
Another thing I have done looking on others Recipes, but still I do not understand well, is define in SixtySix Recipe an unmanaged_files with $goboVariable/log/66 $goboVariable/run/66 $goboVariable/lib/66

That’s all, have a nice day/night.


Recipes Update: Static disabled, Shared enabled and more

Not far from a fully automated service boot tree creation. Next time I will explain how to set up all the system to be able to reboot with S6/66Tools.

CU later

1 Like

The unmanaged_files array are needed for programs that require files outside the /Programs and /System/Settings tree. Such files will be copied to /Programs/Foo/Version/Resources/Unmanaged/ and copied to the destination directory at SymlinkProgram time.

1 Like


Thank you lucasvr providing all of these valuable and precious informations. Still I have a lot of questions but I would like now to share my success to boot GoboLinux with S6init and 66tools thanks to the recipes I have created for this purpose.

This does not mean that the job is done, it is just starting in fact and a lot of things still need to be done, like gobohide integration, environment variable integration into 66 which for the moment still are managed by the original gobo software, and more. At least the system boot and rather quickly and it is something very promising.

So how do you try S6/66 ? Simply follow the process described below.

For now we are starting from a fresh GoboLinux installation in a VMachine. At this point nothing changes. Apply the fixes as described on the Gobo wiki documentation and create a clone on which you will subsequently make the changes.

Clone the 66tools-recipes from my repository for example in /Data/Variable/tmp
git clone https://framagit.org/architekt/66tools-recipes.git

Retrieved the official Gobo recipe tree, copy the content of my repository to the recipe folder
cp -r 66tools-recipes/* /Data/Compile/Recipe

At the moment, we need to manually make some changes to the system.

Edit /System/settings/fstab and comment the lines as shown below.

#proc /proc proc defaults 0 0
#none /sys sysfs defaults 0 0
#none /sys/kernel/config configfs defaults 0 0
#none /dev/pts devpts defaults 0 0
#none /dev/shm tmpfs defaults 0 0

We need to create a sysctl.conf file necessary for the boot
echo "## empty sysctl.conf file" > /System/Settings/sysctl.conf

Now for the build to proceed without a hitch, it’s time to remove sysvinit
RemoveProgram Sysvinit

We start the compilation
Compile Service-Boot

There shouldn’t be any problem during the compilation and you should now be able to run

66-tree -n boot
66-enable -t boot -F boot@system

We can check the services has been well enabled with
66-intree -gz

Finally run

That’s it! Well, you will not be able to reboot with the usual commands with this installation method, so logout and force the shutdown of the VMachine.

Boot and enjoy GoboLinux on S6/66

There is an issue which may cause a failure during the boot. I strongly suppose that this could be from the Forced Shutdown. This is not how it should be done at all and I fully assume that. However it could also come from elsewhere.
Obviously the correct solution is to create a LiveCD with built-in S6/66 but right now, I have no idea on how to proceed to accomplish this task. I’m going to study this.

Well, it seems that running the sync command line at the end, before shutting down fix the issue.

1 Like

Well done, kudos! :slight_smile:

Thx lucasvr :slight_smile:

As a bonus a video of the configuration, installation and boot with S6/66

Be patient at the start, it’s a small and old server :joy:

1 Like