Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Blockers for systemd? #994

Closed
fpqc opened this issue Aug 27, 2016 · 163 comments
Closed

Blockers for systemd? #994

fpqc opened this issue Aug 27, 2016 · 163 comments
Labels

Comments

@fpqc
Copy link

fpqc commented Aug 27, 2016

For various reasons, it isn't obvious to me exactly how to determine what features are missing from WSL's implementation in order to get something like systemd up and running. From the documentation, we know for sure that WSL does not yet implement any of the syscalls related to cgroups, and doesn't include any of the kernel namespaces, which is probably a blocker at the moment. Are there any other missing syscalls or socket options that would block systemd from running?

I also am attaching the output of
strace systemd --test

systemd-trace.txt

(using the docker image of Ubuntu yakkety installed with RoliSoft's python script)

Also, I know that WSL currently uses a kind of hardcoded init process (which sets up the network interfaces, remakes the /etc/hosts file, does some other stuff, then (I think) forks /bin/bash by default). Would the whole initialization process need to be rewritten from scratch to use systemd as the init, assuming all of the other dependencies were eventually implemented (cgroups, aforementioned missing syscalls and socket options)?

@iz0eyj
Copy link

iz0eyj commented Aug 27, 2016

Something in this old thread ( @jackchammons ), but it seems that WSL (and all the Win10 kernel design) is a Top Secret. :)
https://blogs.msdn.microsoft.com/wsl/2016/06/08/wsl-system-calls/

@rodrymbo
Copy link

rodrymbo commented Aug 27, 2016

Considering how open the Devs have been hereabouts, I'd say the issue isn't so much "keeping it secret" as "it's a moving target".

I don't think it will take too long for the Devs to figure out that what they are presenting to us is "single-user, console". To a Linux person it is like Safe Mode is to a Windows person. Yes you can do stuff in Safe Mode, and sometimes you are amazed that it even works at all, but it's not the same as running Windows, just as running WSL without cron or syslog or sshd or a terminal emulator (what we have got is sort of a console emulator) and other servers/daemons/background tasks, is not the same as running an Ubuntu developer machine.

I can be happy without upstart/init/systemd running everything that comes with a fresh Ubuntu install. But the things I work on generally do logging to syslog, and don't have an option for logging to a file; so trying to work on them without rsyslogd is quite difficult. It's nice to be able to run a bash script from a shell prompt, but what would be nicer is being able to run a few from cron, to automate things. And so forth.

So let's see if we can figure out what is blocking systemd, but I'd guess that when the Devs decide it's something they need to implement, they'll figure out a way.

@fpqc
Copy link
Author

fpqc commented Aug 27, 2016

@rodrymbo I'm just interested for my own curiosity. Like, is the main blocker just cgroups, or is it something more difficult? Like, is WSL architected in such a way that its init process needs to be a special one generated by MS, or did they just make a stripped-down init process because they haven't implemented cgroups and didn't want to bother supporting upstart when they knew it was already obsolete?

Basically, I want to compare against this:
Gentoo Kernel Options for Systemd

Aside from cgroups, the requirements don't seem that crazy to emulate. I don't see the specific syscalls mentioned in that guide listed in the list of supported syscalls for WSL, but on the face of it, you need cgroups, "open by fhandle syscalls", eventpoll syscall, signalfd syscall, and timerfd syscall. The rest of the requirements appear to be things that are at various stages of implementation.

P.S. Mercifully, it looks like the Redhat devs have given up for now on pushing things like dbus into the kernel for the forseeable future (there was a big blowout on the kernel.org mailing list over kdbus, and kdbus was dropped from Fedora Rawhide a bit later).

@iz0eyj
Copy link

iz0eyj commented Aug 27, 2016

@fpqc init, upstart etc etc requires a continuous operation; in this moment WSL exists only when calling bash ... perhaps in the future will be different ... (?)
I think now you could only simulate an init or an upstart, but does not implement them really (emulate them)
for system calls I think that certain things cannot be implemented (emulated) because WSL is not a standalone operating system, but I see no reason why they cannot be simulated at least providing a dummy response.
I think the reason is only the young age of WSL, just a few months, but at the end we will have a very close to the "true" Linux.

Sorry for my bad English.

@fpqc
Copy link
Author

fpqc commented Aug 27, 2016

@iz0eyj That's not true, do
$ ps -A

You will see that the init daemon is running at pid 1.

@rodrymbo
Copy link

rodrymbo commented Aug 27, 2016

@fpqc - The Microsoft init (/init, rather than /sbin/init or whatever) is definitely proprietary. It and any other parts of the WSL environment are probably written to meet the bare minimum for whatever requirements they thought would be needed. If the Devs decided they needed cgroups, it will be there, and if they didn't, it probably won't. :P

Not saying you shouldn't be curious, or that trying to figure it out based on clues might not provide an interesting way to pass time.

It looks to me as though they could implement most of a whole linux userland system if they wanted, and much more of the rest of the system, by which I mean to a user everything would work as expected including services. So the issue will likely be how much of that can users like us convince them (in Uservoice or whatever) is worthwhile.

@iz0eyj - right now, most of what you describe is happening: when Bash.exe runs, init is running (apparently launched or managed from svchost.exe or lxssmanager or something). No, it doesn't start when Windows starts (yet) but neither does each Bash.exe console start another init. And yes, it does stop (and tear down the environment) when the last Bash.exe is closed; but until that last Bash.exe closes, init is there, running along in the background. From my perspective, the tearing down of the linux environment is just a matter of the Devs requiring that the system "shutdown -h now" when the last Bash.exe closes. So in a sense, init is running continuously ... when the environment is running.

I agree that for many things it would be good enough for init (or whatever accepts system calls) to return dummy responses that satisfy whatever we are trying to run. For example, ifconfig could return what appear to be two devices, a loopback device and an ethernet device -- even though they don't really exist. (Or maybe there is a pseudo-device that would work without pretending to be a hardware adapter.) As long as networking works, I won't be too picky. I suppose someone will need a VPN, or more control over a tun/tap, and maybe that can come in the future.

@fpqc - For some things it is helpful to look in Process Explorer to see that init is running under a svchost.exe. What you see from ps -A (or ps -Af) could just be a different init in each different bash.exe console, but checking Process Explorer shows that it's the same one (or at least it appears to be) and it is running independently of Bash.exe (aside from being shutdown when the last Bash.exe exits).

@rodrymbo
Copy link

@fpqc - is there a reason for implementing systemd in WSL other than bragging rights? It looks to me like that would bring along a lot of baggage we might not need. Could we go to something closer to sysvinit or whatever for starting a few services, or would having systemd implemented give us a lot of benefits I'm not seeing?

@cerebrate
Copy link

cerebrate commented Oct 9, 2016

For myself, I would like to be able to run systemd not to replace the WSL init, but because being able to start a pseudo-init with systemd --system --unit=foo.target would be a convenient way to start and subsequently manage a set of services/daemons required for a particular development, etc., configuration. By having multiple .target configuration files, that way systemd could be used to set up whatever service-set happened to be needed for a given session in a suitably Linuxy way.

(And, I suppose, those who want services running all the time could put bash.exe -c /bin/systemd into a startup shortcut, but that's just gravy compared to the convenient start-and-manage service functionality that'd come out of it.)

((I added a uservoice request for this here, BTW: https://wpdev.uservoice.com/forums/266908-command-prompt-console-bash-on-ubuntu-on-windo/suggestions/16571479-support-for-running-systemd .))

@schmitch
Copy link

schmitch commented Apr 7, 2017

Well this future would be great to use PostgreSQL or MySQL in Xenial instead of the Windows Installer.
Which would be really really huge, especially if systemd would be invoked on Windows startup and not on bash Startup.

The creators update did many things right, but this would be extremly huge as well. The best thing would be that Windows would be clean and the Development environment can be trashed and cleaned really really easy.

@carwyn
Copy link

carwyn commented Jun 8, 2017

If the desire is to manage a set of services under WSL in a more "linuxy" way it may be worth generalizing this discussion to look at other light weight approaches of doing this. SysV init is one option but there are others that have been developed for more constrained environments that may be of interest for example:

I'd hazard a guess that systemd may be one of the trickier ones to implement let alone track.

I suspect the main motivation for WSL is twofold: for developer tools and for running containers. In both cases they tend to be single thing or chain/group of things per invocation.

@fpqc
Copy link
Author

fpqc commented Jun 8, 2017

@carwyn All of the distro devs with whom MS has announced support (Ubuntu, Redhat, and OpenSuse) are now firmly in the Systemd camp, and all of their package managers and packages assume systemd is running. MS does not want to maintain its own distribution of Linux userland for WSL. Presumably if they do make a switch over to systemd from WSL-init, there should be nothing stopping you from writing shellscripts to wrap the interop daemon to work with sysVinit scripts.

@carwyn
Copy link

carwyn commented Jun 8, 2017

@fpqc granted, although there is also a MS relationship with Docker although that seems more about container management rather than what's in them. Having said that Docker seem to be sniffing around Unikernels a lot.

@bugparty
Copy link

bugparty commented Nov 9, 2017

one of Ubuntu official develops says M$s intent is not a complete linux, its just something like chroot.

@seadonfrank
Copy link

You may want to try using Upstart to run and manage third-party services
Also, Follow me on linkedIn , I am going to publish an article very soon on WSL and running opensource project with WSL. Hopefully, it should give you a comprehensive guide while you start working with WSL

@therealkenc
Copy link
Collaborator

@kenshen112 writes in another issue:

...all .service files in wsl are by default located in the /lib folder mentioned above whilst they should be in the /etc equivalent.
...
...If the wsl team could move the file locations and fix permissions we might see systemd start.

The locations of those files are controlled by Canonical via the Debian systemd Maintainers via Freedesktop.org, not WSL. If you believe moving the file locations will help you could create a launchpad PPA for systemd.

My /etc/systemd/system looks alright enough on WSL. Which it does because it is just the stock Ubuntu image and systemd package. Could be missing something, but even if I am, that isn't the end of your voyage. Getting closer though (for some relative value of 'close`).

@weirdbeardgame
Copy link

@therealkenc as far as I understand all .service files should be in /etc/systemed which most aren't and that's what causes the error as far as I can see if i execute the command in my post copying the files from there previous location to /etc/ it works aside from the permission's issue. if that's how conical has it by default though then I wonder if there's a symlink missing somewhere???

@therealkenc
Copy link
Collaborator

I haven't looked into systemd for a few months, and I am not sure why the .service entries you think might be missing aren't there. This is what mine looks like (unmodified) for what it is worth. But missing entries shouldn't cause systemd to fail (as far as it goes); it would just mean less services start. What methodology are you using to start systemd, if any? You are running systemctl status in #2787, but that is putting the horse before the cart because systemd isn't running per #2209 #1579.

@weirdbeardgame
Copy link

so first off https://askubuntu.com/questions/894419/systemd-on-ubuntu-16-04-gives-no-such-interface-error one small example of the same problem / fix occurring in ubuntu 16.04
after I make the change my etc folder looks like https://pastebin.com/u3UkEeeH but now there's permission issues as previously stated.

sysctrl is a tool that allows one to create and manage service files used by systemd - the reason I said it could help us https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-units it manages the stopping and starting of systemd services a key piece of what systemd does as a whole so whilst it might not fully fix systemd it'll give us some of the functionality of it at least for sysadmin's that's incredibly useful.

@fpqc
Copy link
Author

fpqc commented Dec 28, 2017

@kenshen112 no. Only changes or custom systemd unitfiles go into /etc/systemd.

default unitfiles belong in /usr/lib/systemd/system

Systemd provides tooling to build and store diffs of default unitfiles in your /etc/systemd/system as well as completely custom unitfiles.

@sathyank
Copy link

I'm using SUSE Linux Enterprise Server 15 SP1 on my windows 10 machine. I installed it from microsoft store. I facing the same issue mentioned here. Is there any workaround to start (force) the services. I tried all the things mentioned. Please help.

@xuanruiqi
Copy link

Well, you could use genie and start a "systemd bottle", I suppose. I don't know if there is a SUSE package for genie, though.

That said, I suppose WSL could provide something like genie out of the box, since many WSL users' workflow depend on systemd.

@nezorflame
Copy link

nezorflame commented Aug 24, 2021

I've been using one-script-wsl2-systemd solution (build-21286+ branch) which works for me (huge thanks to @diddledani btw), YMMV though.

@sathyank
Copy link

@nezorflame After following the manual installation, not able launch my wsl distribution. (after the terminate command mentioned).

@sathyank
Copy link

sathyank commented Aug 25, 2021

I've been using one-script-wsl2-systemd solution (build-21286+ branch) which works for me (huge thanks to @diddledani btw), YMMV though.

@nezorflame After following the manual installation, not able launch my wsl distribution. (after the terminate command mentioned in the https://github.com/diddledani/one-script-wsl2-systemd/tree/build-21286+).

@nezorflame
Copy link

I suggest creating an issue in the project's repo instead.

@trallnag
Copy link

trallnag commented Sep 18, 2021

Genie seems to be the most used systemd solution for WSL

https://github.com/arkane-systems/genie

But there are still quite a lot of issues with it

@trallnag
Copy link

Some people recommend to just a proper VM, for example with VMware Workstation. But with this we lose the great Windows integration WSL gives us. For example with wslview I can open anything in WSL with a Windows tool. For example the explorer. This is not possible with a "normal" VM.

@EmpiricEmpire
Copy link

But with this we lose the great Windows integration WSL gives us. For example with wslview I can open anything in WSL with a Windows tool.

You can run WIndows apps in Linux with WINE, which simply proxies WinAPI to Linux counterparts.

@trallnag
Copy link

@EmpiricEmpire, at my job I'm currently limited to Windows and Mac

@EmpiricEmpire
Copy link

@EmpiricEmpire, at my job I'm currently limited to Windows and Mac

WINE is supported on Mac as well https://www.winehq.org/

@nezorflame
Copy link

Let's stay on topic of systemd in WSL please.

@xuanruiqi
Copy link

Agreed. Plus Wine is pretty much a non-solution. systemd for WSL is still a huge blocker, and IMO the largest blocker yet.

@rektide
Copy link

rektide commented Nov 16, 2021

Not sure what issues there are, what workarounds they've done, but Distrod is another systemd-init on WSL.

@ahupp
Copy link

ahupp commented Dec 7, 2021

Two issues I've run into recently due to this:

  1. In Ubuntu, /var/run/utmp is missing which is normally created by init. This breaks screen, which breaks do-release-upgrade in a fairly inscrutable way.
  2. The k3s kubernetes distribution expects systemd during install.

So in general I think there's a long tail of stuff that directly or indirectly depends on systemd being available.

@trallnag
Copy link

trallnag commented Dec 7, 2021

FYI: https://www.theregister.com/2021/11/17/ubuntu_team_systemd_windows_wsl2/

Canonical may be working on introducing systemd to Ubuntu on Windows Subsystem for Linux (WSL), according to a post by Ubuntu Desktop Team Technical Leader Didier Roche

I wonder if Canonical is in contact with people from MS WSL?

@gdwnldsKSC
Copy link

We're still keeping the ability to run non-systemd installations right? Being beholden to systemd would destroy our development process

@craigloewen-msft
Copy link
Member

There is now support for systemd in WSL, for more info on how to use it please read here.

@sl1pkn07
Copy link

if is for only windows 11, is useless :(

this need to be retro compatible with windows 10

greetings

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests