@ marianarlt
# 66-enable -h               
66-enable <options> service(s)
options : ...
	-S: enable and start the service
Is this what we were talking about? So this is already done.
yes, the same exist for disable : disable AND stop the service
7 days later
can you confirm that the conversion still works from scrarch. Some of the installations that worked last week now are having problems and a new try also failed. It fails the same way with tty1 not working. It almost goes for split second to login and switches to # emergency saying something wrong with stage 2. tty12 works, then networking is not working, if has to be enabled manually and dhcpcd run manually for it to work.
Switching back to s6 and everything works again.
the /run/66....log has so much output that I can't tell where the problem begins to appear or able to understand it all.

Today's 66 update was applied, no difference.
@ can you confirm that the conversion still works from scrarch

yes the last version of 66 ( 0.0.0.1-15) works well
66 do not use any components of s6opts scripts, 66 service have a completely different service syntax declaration and place to save the resulting service file of the parser process, please refer to : repo.obarun.org/66/frontend.html documentation
Fungal, a lot of confusion will probably be wiped out when the docs are all ready. 66 basically wants to replace s6opts. Both manage s6 and s6-rc.
The docs that have come out are great but they address specific use. The overall working of the init system and the use of 66tools lacks some documentation. I think I understand, intuitively, what a scandir is, or a tree, or a database. How does the system go from pid1 to stage 2?
The other thing I am missing is that I do the installation as described on the top of the thread, I install 3 out of the -66serv pkgs, and you can not enable them till the reboot as /run/66/scandir does not exist yet. Then you reboot thinking you have to enable them manually but they are already there, active. And, tty@ -66serv can not be enabled, so what is it for? A dependency of root-66tree? Or serves as a template to enable the service of an additional tty (tty9)?
@ How does the system go from pid1 to stage 2?
this is done at the init phase (see /usr/bin/init file), the init file will create the necessary directory for the scandir then launch the stage2 is background mode and finally start the scandir itself. Those operation is done in conjonction with 66-scandir and 66-init tools.

@ I install 3 out of the -66serv pkgs, and you can not enable them till the reboot as /run/66/scandir does not exist yet.
This is not correct , you can enable it but you need to create a tree for this. Well, when you install boot-66serv only the necessary tree for the boot is created (see the boot-66serv install file : https://framagit.org/obarun-pkgbuild/boot-66serv/blob/master/boot-66serv.install), then when you install e.g ntpd-66serv and you want to enable you need to have a already existing tree. At the first installation the only one is the tree boot. so if you want you can enable it on this tree but , for me, this clearly not a good idea because you mix boot service and running time service(like other service manager cought), but you can do it if you want. So, the proper way is to create a new tree called e.g root. Then you enable your ntpd service on it. That being said, this is exactly what the root-66tree do :) but for tty service( see : https://framagit.org/obarun-pkgbuild/root-66tree/blob/master/root-66tree.install). This package will create a new tree called root, make it as the current tree, and enable tty1 and tty2 on it. That's why when you install this package you have the tty already enabled at the next boot. Next you install a new service like dbus and you type : 66-enable dbus, the 66 tool will enable it on the tree called root because it was marked as current previously by install process of the root-66tree package :).

By the way, my thought is : when i do not make automatic stuff, people are disagree because it seem complicated to make it, when i do automatic way, people disagree because it's seem magical :D.

@ Or serves as a template to enable the service of an additional tty (tty9)?
Correct, this is a template service file, you can create a tty9 with this template with : 66-enable -I tty9 tty@ . This is the same way as system:D do. and you can create easily your own template service file : see the http://repo.obarun.org/66/frontend.html# instance documentation.

@ The overall working of the init system and the use of 66tools lacks some documentation.
To be honest, the documentation is not my priority for the moment because i'm currently changing some important part of the code and i do not want to write a documentation to change it right after. Furthermore, the documentation is made with the really appreciated help of marianarlt, but write a documentation as more as precise as possible with a good english(everyone here know that i have a really good english :p) and syntax is not a simple things. For example the instance features will change, the -d options with 66-enable will change and a new tool 66-graph(or mixed on the 66-info) will come. this new tool will show you information about dependencies service like this : https://bpaste.net/show/c37659b56150.

I understand that you can be impatient but be aware of one thing : i'm also impatient to be able to make the first official release of 66 tools :). Some people are currently porting the 66 tools on exerbo and those guys are impatient too (and help me a lot about bug research).
I sure don't want to switch places with Eric :lol:
fungalnet wroteI think I understand, intuitively, what a scandir is, or a tree, or a database.
When I first read the Obarun Wiki about s6 I was completely overwhelmed and lost about how ANYTHING would function, even coming from runit. To top things off its managing tool s6opts is overloaded with complexity and databases and whatnot. I actually still don't get it very well and I will not touch more than really necessary. I do like the concept of a sort of bundle (tree) for services (which I guess the idea behind databases was in the first place? I don't know...). s6 to me seems complex in itself, but I also think that this is because people don't use it as much as other init systems which are far better documented, reviewed and written about.
hum, let's go to compare what is can be compared , because we talk about init and service manager.
So, please guys read the entire documentation (how to boot the machine, how the machine is booted, how to create a service, how to change the environment of the daemon, where are the configuration file, how to create a socket, how to disable dbus ( :lol: ),...) of the crap, learn and mostly understood (good luck) and tell me if s6 and 66 is complex :lol:
Sorry I sure didn't mean to compare apples with oranges. And I think I'll personally read more into details of booting etc. Still I had a hard time sleeping tonight because I want to say this:
I think to understand that from a design view s6 is trying to remove complexity from what it serves. This is great to begin with. I also see that it is not used a lot yet which is why it may be tough for a first timer to get around it.
I also see that it has a management tool atop of it, which reintroduces complexity.

As human beings what we do best is add complexity even to really basic things. To everything and anything. This counts for necessities, relationships, creation of things and life in general.
So here in the forum just as everywhere else, as people, we belong to some sort of group. Fungal writes a lot of tech reviews but I don't know if he would relate to that as a group. I myself belong to a sort of visual design group, because that was my job for a long time. I'm mentioning this because apparently we all have different view points and angles depending on where we're coming from or what we're doing in our jobs or free time.

Now 66 wants to be a simpler solution to manage services for s6. So there's a design process involved here. The process of finding a solution to a problem, which is design. Mankind usually comes up with some sort of "tool" at the end of that process. These can be rather big and complex or small and simple, but the ones that persist over long time, decades, centuries and even millenia, are those that have a few things in common:

- Form follows function
The over used phrase of 20th century product design and architecture. It's as easy as this: if my solution does not directly address the issue it tries to resolve in the most simple manner, then it's not even ready to be formed yet. If it does, then only wrap it up as much as needed to get it to the common user and have him use it in the most intuitive way. See early televisions, radios and apparatus by Braun for example or Bauhaus architecture in the past century. They had just the necessary features to make the apparatus or the building work for its supposed function. View moving images, hear voice or music, or live in a closed space. This leads to another principle:

- As much as necessary with as little as possible
A teacher of mine in university back in the days taught us this. And it is SO important. It actually applies to anything we create. This is what makes tools persist. This is why our cars still have four tires and our bicycles two although there are alternatives around. This is why we still eat with a spoon, a fork, or sticks or in some situations even those add too much complexity and we use our hands. It's what makes things easy to work with. And that's what we want. We want a tool that helps us address our present issue. This also leads to this:

- There is no single best solution to a problem.
Depending on the issue to get around with, different tools might have different approaches to the same object. I use a fork, other people use sticks, other people use hands to eat. Three very different tools to address the same problem. Neither better than the other. You might argue that a spoon may serve better for eating a soup than sticks, but I must honestly say: I'm quite tall and I hate eating soups with spoons (although I keep doing it...) because on the way to my mouth half of the freaking liquid is back on the plate instead of in my stomach. This is a user problem though and the way I use this tool. I could just as well lift the plate and drink it.

So you might say "that's all nice for coffee makers and cars and stuff but we're talking about programming". I say to you: digital design is of absolutely no difference regarding these few rules. That's why lately a very famous init system has got a lot of hate, because it does way more than "necessary" with as much as "possible". It's like the google car of cars. It wants to take control over your life instead of just getting you from A to B.

Apparently as a creator you might offer options to your tool that may appeal to its user. Depending on the use case one person might like a truck with decent loading volume for land use when another person might want a very compact drive with a nice audio system to fit in a big city. Both will have four tires to move at all, a steering wheel to direct them, a chassis to protect you from rain and the necessary parts to make these work together.
To get back to the topic and speaking of technical programs which are mostly functions by themselves, we also tend to make things more complex than they need to be. Principles like "DRY" or "KISS" come to mind. I ask myself: "How much knowledge do I have to have as a user to get into my operating system?" Usually that should just be: "Push the button, enter password". (Where the password is actually an extra layer of complexity for people to feel comfortable about security, making them accept that extra effort. Some people do not accept that effort and set up auto login.)
Then the next question is: "How much knowledge do I have to acquire to get a visual desktop, a network connection and a printer working on my not pre-configured operating system?" I would want to answer: "As little as possible". So while I may study computer engineering and how computers actually get from "light on" to "high speed internet HD gaming and printing while watching TV all on the same monitor"..., I might as well search for a different solution to my problem. After all, some other systems let me just start a service right away, why the hell would I need to create a database? Because if I do not understand everything involved in this, I may become frustrated, feel less educated or just plain stupid and bail out. So instead of gaining this person as a user, he ran away. I know that a lot of creators will blame the user here and say that he was not educated enough to begin with or didn't show the interest needed to get things done. This is a defensive reaction and will in return marginalize the rejected design which may not be what the creator wanted.

As a conclusion as a creator you might want to offer a lot of options to adapt a tool to slightly different needs, but they should be just that. Options. The basic functions should be "KISS". Keep it simple, stupid. I'm not at all writing any of this to criticize the work done here but instead to reason that if a user gets confused, my design may not yet be simple enough. Of course there's always a balance to find between all these things and this is no easy task. Also 66 is in a stage where we try to drive the vehicle designed for four tires with just three of them mounted out of the assembly line into the city.

I hope this makes sense to anybody reading it and that 66 will find just that right balance to get used by anybody happily ever after.
1 Networking if names dhcpcd
For the n+1 time (I believe it is the last conversion I do from s6opts to 66**) I converted a well running minimal system from s6opts to 66, following the procedure at the beginning of the thread. I am still confused nevertheless because I can only deduce what I should from "various" sources. The process says remove s6-boot s6opts, which requires to remove all s6serv s6rcserv, but it can only be done later.
After I did it and rebooted I enabled dbus, dhcpcd, ntpd after installing the appropriate -66serv - and I believe this can only be done right AFTER the 1st reboot? Enable, start, and the 66info -S dhcpcd to make sure it is running.

PROBLEM: the only active interface name is lo, eth0 is inactive. If I enable eth0 (I do this with ifconfig) then try to restart dhcpcd it gets confused, it provides only ipv6 connectivity, no ipv4.
If I stop dhcpcd (not disable, just stop), bring eth0 down, then lo down, then lo up, then eth0 up, then restart dhcpcd it provides me with an ipv4 ip. Everything is ok afterwards.
It is a procedure I don't want to have to do every time I boot.
Trying to figure out what I have done wrong, I used the beta-66 iso, added my usual net.ifnames=0 to the the linux boot line, and booted it. Same exact behavior, same s6/66 stuff installed. Now all this is on vm with a bridged internet connection.
Isn't this part of eudev business? Is it possible something is starting too fast and something that follows doesn't give enough time for the previous process to define if names and the system gets confused? It didn't have such a problem with s6opts and the problem went away when I reverted again for nth time back to old s6opts. Yes, everything -Sy is correct and reverted when I go to 66 and back to s6 (there are 6-7 pkgs that are updated in 66 repository and going back to s6opts you have to revert them).

Bottom line, between skarnet, obarun wiki on s6, and 66, there is a tremendous gap that can't be bridged.
It is like a new one-off motorcycle, nothing like any other you have seen, and although it does fit the description that it is a motorcycle the manual only talks about what a screwdriver does, what the spark-plug wrench does, that is based loosely on an original kawazuki design, but whether it is 2stroke/4stroke, rotary, turbo, you may never know. But you know how to use a screwdriver on it and it does have sparkplugs.

It does take longer to boot, but it doesn't seem to provide exactly what is promised, and it is too early to know how to troubleshoot. Based on this thread alone it seems other than Eric I am the only one who has actually tried it? That whole gamma of -s6serv/s6rcserv don't exist. How can those services be enabled/started/activated/monitored? How does cupsd run under 66?

One last question: Can I use the s6 init system and not use either s6opts, or 66 tools, and just start the few services I need manually? I understand if for some reason they stop running I would have to manually restart them.

PS I have spent 1/10 (maybe even less) of time on runit in artix and void compared to s6, and I sure feel 10times more confident on what I am doing and what runit is doing.

PS2 Please forgive the mounting frustration of trying to understand and figure out how to make this thing work, but it doesn't work for me, "YET".
@ marianarlt
In a way I come from a design background myself, and yes you said a magic word, "why?" or "what problem are we trying to solve".

Sometimes you keep mounting problems and keep trying to make patches to solve all little problems, and sometimes you say "the hell with this, I am scraping the whole machine, and design a whole new one that will never have such problems", knowing full well it may not have these problems but it may have many new problems down the path of development.
Outside the design room people who try to encourage such development want to know what were the problems, what is the same as before, what is new, and how does the old and the new blend together. Because for the past 10.000 years nothing is 100% new, it has been influenced and developed from a previous solution, from the first rhinosaurus bone used as a tool to the latest digital micro-micrometer, there is always an overlap in design.
I have lost continuity, I don't know where the old s6 ends, or skarnet's s6, and where 66 takes over and substitutes s6opts. It seems that alot of previous complexity is carried on and some new complexity is blended together. Where in runit I look at /run/runit/service (or whatever) and see linked services being active, here I see a maze of things under /run/66 that has no definition in any documentation. ??????...........
Ok, I am sorry, I read message # 31 and didn't realize # 29 was also new.
Now I am even more confused.

a IF I don't create a new tree, tree boot exists by just installing 66-pkgs.
b IF one of those pkgs is root-66 then the tree root is created, right. It is active on top of boot.
c IF then I install dhcpcd-66serv, and I just enable it without specifying a tree, on which tree is it being added? Root?
d If I didn't install root-66tree but enabled tty1 with tty@ and have not still added any new tree, then tty1 is active on boot-tree?
Hahaha I actually read from your last comment that you are LESS confused and about to get the idea behind the tree sets :P
Please bear in mind that you are trying to "drive the vehicle designed for four tires with just three of them mounted out of the assembly line into the city." This is apparently a very difficult act. This is exactly why I am not trying any conversion or testing yet, not even in VM. But that is rather because I don't have any means to set up VMs at the moment. I suppose once Eric has finished his work and integrated it into Obarun (is this actually planned?) we will be like: "Ooooh, so THAT'S how it was". ;)
This I can tell you. If you add the 66 repository you see that the next version of key-packages are made for 66, and if you just upgrade them without installing 66 your system will not function with s6opts/boot.
Package (9)           Old Version  New Version  Net Change

66/execline           2.5.0.0-1    2.5.0.1-1      0.19 MiB
66/mdevd              0.1.0.1-1    0.1.0.2-1      0.00 MiB
66/s6                 2.7.1.1-1    2.7.2.0-1      0.29 MiB
66/s6-dns             2.3.0.0-1    2.3.0.1-1      0.05 MiB
66/s6-linux-utils     2.4.0.2-1    2.5.0.0-1     -0.02 MiB
66/s6-networking      2.3.0.2-1    2.3.0.3-1      0.07 MiB
66/s6-portable-utils  2.2.1.1-1    2.2.1.2-1      0.17 MiB
66/s6-rc              0.4.0.1-1    0.4.1.0-1      0.04 MiB
66/skalibs            2.6.4.0-1    2.7.0.0-1      0.01 MiB
If you don't upgrade these pkgs and still install 66 then 66 doesn't work. So I presume when time comes to switch the change will be mandatory. If you are curious about it use the 66beta iso in a vm at least to get first hand experience, but I believe you learn more by the conversion.
fungalnet wrote After I did it and rebooted I enabled dbus, dhcpcd, ntpd after installing the appropriate -66serv - and I believe this can only be done right AFTER the 1st reboot? Enable, start, and the 66info -S dhcpcd to make sure it is running.
enabling doesn't mean starts a service, so you can enable it AND reboot.
PROBLEM: the only active interface name is lo, eth0 is inactive. If I enable eth0 (I do this with ifconfig) then try to restart dhcpcd it gets confused, it provides only ipv6 connectivity, no ipv4.
If I stop dhcpcd (not disable, just stop), bring eth0 down, then lo down, then lo up, then eth0 up, then restart dhcpcd it provides me with an ipv4 ip. Everything is ok afterwards.
It is a procedure I don't want to have to do every time I boot.
Trying to figure out what I have done wrong, I used the beta-66 iso, added my usual net.ifnames=0 to the the linux boot line, and booted it. Same exact behavior, same s6/66 stuff installed. Now all this is on vm with a bridged internet connection.
Isn't this part of eudev business? Is it possible something is starting too fast and something that follows doesn't give enough time for the previous process to define if names and the system gets confused? It didn't have such a problem with s6opts and the problem went away when I reverted again for nth time back to old s6opts. Yes, everything -Sy is correct and reverted when I go to 66 and back to s6 (there are 6-7 pkgs that are updated in 66 repository and going back to s6opts you have to revert them).
this is really curious, i just tried on fresh installation from scratch into a VM, so installing a minimal system then enabling and start the dhcpcd service, all worked fine.
Maybe udevd stuff but i don't think so. what it's weird that's the fact that all works for you if you reverse to the s6opts system.... Well, you can see easily the log of your dhcpcd service using this following command : 66-info -S -p20 dhcpcd
The -p20 means print the last 20 lines of the dhcpcd log.
Be aware that you can change the command line of the dhcpcd service at /etc/66/env/dhcpcd/CMD_ARGS file, this file set the command line to pass to dhcpcd to start, you can change it by something like this : eth0 -f /etc/dhcpcd.conf , replacing the eth0 interface name by the good one for you (try to see it with the command : ip link show)
Based on this thread alone it seems other than Eric I am the only one who has actually tried it?
not , you 're not alone but other user are on channel/or mail instead of the forum and some are not on obarun and try it on their own distro.
Can I use the s6 init system and not use either s6opts, or 66 tools, and just start the few services I need manually?
yes you can but good luck, take a great cup of coffee and start reading the s6 documentation ...
PS I have spent 1/10 (maybe even less) of time on runit in artix and void compared to s6, and I sure feel 10times more confident on what I am doing and what runit is doing.
you are currently comparing a 2CV with a Ferrari, so yes runit is more simple for sure :lol:
a IF I don't create a new tree, tree boot exists by just installing 66-pkgs.
b IF one of those pkgs is root-66 then the tree root is created, right. It is active on top of boot.
c IF then I install dhcpcd-66serv, and I just enable it without specifying a tree, on which tree is it being added? Root?
d If I didn't install root-66tree but enabled tty1 with tty@ and have not still added any new tree, then tty1 is active on boot-tree?
a) if you ONLY install 66, you have nothing, no boot tree, no root tree , no tree at all. You start from the scratch, the machine will no boot because you don't have any service at all, you only have the tools and that's all.
When you install the boot-66serv it will install all the file service for the boot process and create the tree boot, then enable the service for the boot process on the tree boot. Pacman will install the service file at /etc/66/service. So, if you take a look on this directory, you will find ALL service installed and available on the system.

b)right , this package will create the tree root, MARK it as CURRENT and enable tty1 and tt2 on it.

c)if you install dhcpcd-66serv ALONE(so root-66tree was not installed), the 66 tools will ask you the tree to use to enable it because no tree was define as current one.

d) same case here, no tree was define as current, so 66-enable will expect the -t option to know which tree to use. when you do 66-info -T without any arguments, the tools will show you ALL tree available for the current user of the process with some information as if the tree is enabled or not, if it's the current one..
if you do 66-info -T boot , the tools will show you ALL service enabled on the tree.

Now i will try to compare command and concept form s6opts to 66 .(i think you will appreciate it) .

Assumptions : we start from the scratch, no tree/database exist

How to add an rc service to a specific database?
with s6opts :
first you need to create a database
s6opts add nfs bundle-Nfs -> this will create a new database (a TREE on 66) called nfs and enable bundle-Nfs on it.
now you need to compile this fresh database
s6opts compile Nfs nfs -> this will compile a new database (a TREE on 66 ) called Nfs with the source called nfs
then you need to make the database as the current one
s6opts switch Nfs
and finally you start it
s6opts update bundle-Nfs
on 66 :
first you need to create a tree
66-tree -cn Nfs -> this will create a new tree (a DATABASE) called Nfs AND mark it as current one
finally you start the service
66-enable -S bundle-Nfs -> this will enable the service onto the tree Nfs and start it

Well, as you can see the operation with 66 is clearly more easier and quick than s6opts. Now, imagine that you don't mark the Nfs tree as current one like this :
66-tree -n Nfs -> this create a new tree called Nfs but without marked it as current.
how i can enable the bundle-Nfs on this tree
66-enable -t Nfs -S bundle-Nfs -> you specify the tree to use directly on the command line. This is impossible under s6otps, you need to switch first to the database that you want to use. That means that you can have multiple tree (database) and deal with service on it directly by the command line with the -t options. This is also valid for the majority of the 66 tools.

So, a big difference exist between s6opts and 66. S6opts only accept bundle,longrun,oneshot service on a database.YOU CANNOT deal with classic service onto a database with s6opts. With the tree concept on 66 you CAN have classic,bundle,longrun,oneshot service on the same tree.

Assumptions: we have now created a tree/database called Nfs
How to enable a classic service?
with s6opts:
s6opts enable ntpd -> this will enable and start the service ntpd
with 66 :
66-enable -S ntpd -> this will enable and start the service ntpd. If ANY tree was marked as current you need to specify it onto the command line like 66-enable -t Nfs -S ntpd

How to know which service is active?
with s6opts:
s6otps list -> this will display all the service currently in use
with 66 :
66-info -T Nfs -> this will display all the service onto the tree Nfs

How to know the status of a service?
with s6otps
s6opts status nptd
with 66
66-info -S ntpd

A big big change and surprise will come about the 66-info tool...(do you know the output of the systemctl status command? but shutttttt... only system:D can do this)

How to compile a database?
with s6opts
s6opts compile Nfs nfs -> this will compile and create the database called Nfs with the source called nfs
with 66
YOU DON'T CARE, this is done automatically

How to enable different kind of service in one pass?
with s6opts
IMPOSSIBLE
with 66
66-enable -S ntpd bundle-Nfs -> YOU DON'T need to care if the service is a classic, longrun,oneshot,bundle one, 66 tools will automatically make the necessary in function of the type encounter.

how to start/stop a service?
with s6opts
s6opts up npd -> ntpd is a classic service so you need to use up command
or
s6otps update bundle-Connmand -> bundle-Connmand is a bundle service so you need to use update command
with 66
66-start ntpd bundle-Connmand -> again you don't care about the kind of the service

how to reload a service?
with s6opts
IMPOSSIBLE directly
with 66
66-start -r ntpd

how to overwrite an existing classic service ?
with s6opts
change the service file then
s6opts disable ntpd
s6opts enable ntpd
with 66
change the service file then
66-enable -f ntpd

how to overwrite an existing bundle,oneshot,longrun service?
with s6opts
you need to recompile the database from the start
with 66
66-enable -f bundle-Nfs

how to change the command line of a daemon?
with s6opts
IMPOSSIBLE directly, you need to change the file of the service and recompile the database or disable/enable again the service if it's a classic one
with 66
go to /etc/66/env/ntpd/CMD_ARGS change what you want then :
66-start -r ntpd

Where the service is installed by pacman?
with s6opts
depending of the type of the service : classic at /etc/s6-serv/available/classic/ntpd, other at /etc/s6-serv/available/rc/bundle-Nfs
with 66
classic at /etc/66/service/ntpd, other at /etc/66/service/bundle-Nfs

How to create a service ?
with s6opts
s6opts create -> an you need to create a bunch of file and know exactly what file do and how the file works, and over all this, file for classic one and other one are not the same (and i don't talk about logger part)
with 66
one file for ALL kind of service (and the logger also can be created automatically)

how to know the dependencies of a service
with s6opts
nice try peon
with 66
66-info -S bundle-Nfs

how to view the log of a service
with s6opts
no command at all, open your favorite editor and search into /var/log/{s6serv,s6rcserv}
with 66
66-info -S -p20 nptd

how to create an instance service
with s6opts
what's the hell is that?
with 66
66-enable -I tty1 tty@ -> this command is now deprecated , on the new release it will be : 66-enable tty@ tty1

Hope those little example help you to understand the things
Thank you, this helped answer most questions, hopefully it will help others and possibly it will help you too to bridge some gaps in documentation.
Now we have an FAQ for 66

Powered by Obarun