mirror of https://github.com/containers/podman.git
195 lines
6.2 KiB
Go
195 lines
6.2 KiB
Go
//go:build windows
|
|
|
|
package wsl
|
|
|
|
const (
|
|
ErrorSuccessRebootInitiated = 1641
|
|
ErrorSuccessRebootRequired = 3010
|
|
currentMachineVersion = 3
|
|
)
|
|
|
|
const containersConf = `[containers]
|
|
|
|
[engine]
|
|
cgroup_manager = "cgroupfs"
|
|
|
|
# Using iptables until we fix nftables on WSL:
|
|
# https://github.com/containers/podman/issues/25201
|
|
[network]
|
|
firewall_driver="iptables"
|
|
`
|
|
|
|
const registriesConf = `unqualified-search-registries=["docker.io"]
|
|
`
|
|
|
|
const appendPort = `grep -q Port\ %d /etc/ssh/sshd_config || echo Port %d >> /etc/ssh/sshd_config`
|
|
|
|
const changePort = `sed -E -i 's/^Port[[:space:]]+[0-9]+/Port %d/' /etc/ssh/sshd_config`
|
|
|
|
const configServices = `ln -fs /usr/lib/systemd/system/sshd.service /etc/systemd/system/multi-user.target.wants/sshd.service
|
|
ln -fs /usr/lib/systemd/system/podman.socket /etc/systemd/system/sockets.target.wants/podman.socket
|
|
ln -fs /usr/lib/systemd/user/podman.socket /etc/systemd/user/sockets.target.wants/podman.socket
|
|
rm -f /etc/systemd/system/getty.target.wants/console-getty.service
|
|
rm -f /etc/systemd/system/getty.target.wants/getty@tty1.service
|
|
rm -f /etc/systemd/system/multi-user.target.wants/systemd-resolved.service
|
|
rm -f /etc/systemd/system/sysinit.target.wants//systemd-resolved.service
|
|
rm -f /etc/systemd/system/dbus-org.freedesktop.resolve1.service
|
|
ln -fs /dev/null /etc/systemd/system/console-getty.service
|
|
ln -fs /dev/null /etc/systemd/system/systemd-oomd.socket
|
|
mkdir -p /etc/systemd/system/systemd-sysusers.service.d/
|
|
echo CREATE_MAIL_SPOOL=no >> /etc/default/useradd
|
|
adduser -m [USER] -G wheel
|
|
mkdir -p /home/[USER]/.config/systemd/[USER]/
|
|
chown [USER]:[USER] /home/[USER]/.config
|
|
`
|
|
|
|
const sudoers = `%wheel ALL=(ALL) NOPASSWD: ALL
|
|
`
|
|
|
|
const bootstrap = `#!/bin/bash
|
|
ps -ef | grep -v grep | grep -q systemd && exit 0
|
|
nohup unshare --kill-child --fork --pid --mount --mount-proc --propagation shared /lib/systemd/systemd >/dev/null 2>&1 &
|
|
sleep 0.1
|
|
`
|
|
|
|
const wslmotd = `
|
|
You will be automatically entered into a nested process namespace where
|
|
systemd is running. If you need to access the parent namespace, hit ctrl-d
|
|
or type exit. This also means to log out you need to exit twice.
|
|
|
|
`
|
|
|
|
const sysdpid = "SYSDPID=`ps -eo cmd,pid | grep -m 1 ^/lib/systemd/systemd | awk '{print $2}'`"
|
|
|
|
const profile = sysdpid + `
|
|
if [ ! -z "$SYSDPID" ] && [ "$SYSDPID" != "1" ]; then
|
|
cat /etc/wslmotd
|
|
/usr/local/bin/enterns
|
|
fi
|
|
`
|
|
|
|
const enterns = "#!/bin/bash\n" + sysdpid + `
|
|
if [ ! -z "$SYSDPID" ] && [ "$SYSDPID" != "1" ]; then
|
|
NSENTER=("nsenter" "-m" "-p" "-t" "$SYSDPID" "--wd=$PWD")
|
|
|
|
if [ "$UID" != "0" ]; then
|
|
NSENTER=("sudo" "${NSENTER[@]}")
|
|
if [ "$#" != "0" ]; then
|
|
NSENTER+=("sudo" "-u" "$USER")
|
|
else
|
|
NSENTER+=("su" "-l" "$USER")
|
|
fi
|
|
fi
|
|
"${NSENTER[@]}" "$@"
|
|
fi`
|
|
|
|
const waitTerm = sysdpid + `
|
|
if [ ! -z "$SYSDPID" ]; then
|
|
timeout 60 tail -f /dev/null --pid $SYSDPID
|
|
fi
|
|
`
|
|
|
|
const wslConf = `[user]
|
|
default=[USER]
|
|
`
|
|
|
|
const wslConfUserNet = `
|
|
[network]
|
|
generateResolvConf = false
|
|
`
|
|
|
|
const resolvConfUserNet = `
|
|
nameserver 192.168.127.1
|
|
`
|
|
|
|
// WSL kernel does not have sg and crypto_user modules
|
|
const overrideSysusers = `[Service]
|
|
LoadCredential=
|
|
`
|
|
|
|
const bindMountSystemService = `
|
|
[Unit]
|
|
Description=Bind mount for system podman sockets
|
|
After=podman.socket
|
|
|
|
[Service]
|
|
RemainAfterExit=true
|
|
Type=oneshot
|
|
# Ensure user services can register sockets as well
|
|
ExecStartPre=mkdir -p -m 777 /mnt/wsl/podman-sockets
|
|
ExecStartPre=mkdir -p -m 777 /mnt/wsl/podman-sockets/%[1]s
|
|
ExecStartPre=touch /mnt/wsl/podman-sockets/%[1]s/podman-root.sock
|
|
ExecStart=mount --bind %%t/podman/podman.sock /mnt/wsl/podman-sockets/%[1]s/podman-root.sock
|
|
ExecStop=umount /mnt/wsl/podman-sockets/%[1]s/podman-root.sock
|
|
`
|
|
|
|
const bindMountUserService = `
|
|
[Unit]
|
|
Description=Bind mount for user podman sockets
|
|
After=podman.socket
|
|
|
|
[Service]
|
|
RemainAfterExit=true
|
|
Type=oneshot
|
|
# Consistency with system service (supports racing)
|
|
ExecStartPre=mkdir -p -m 777 /mnt/wsl/podman-sockets
|
|
ExecStartPre=mkdir -p -m 777 /mnt/wsl/podman-sockets/%[1]s
|
|
ExecStartPre=touch /mnt/wsl/podman-sockets/%[1]s/podman-user.sock
|
|
# Relies on /etc/fstab entry for user mounting
|
|
ExecStart=mount /mnt/wsl/podman-sockets/%[1]s/podman-user.sock
|
|
ExecStop=umount /mnt/wsl/podman-sockets/%[1]s/podman-user.sock
|
|
`
|
|
|
|
const bindMountFsTab = `/run/user/1000/podman/podman.sock /mnt/wsl/podman-sockets/%s/podman-user.sock none noauto,user,bind,defaults 0 0
|
|
`
|
|
const (
|
|
defaultTargetWants = "default.target.wants"
|
|
userSystemdPath = "/home/%[1]s/.config/systemd/user"
|
|
sysSystemdPath = "/etc/systemd/system"
|
|
userSystemdWants = userSystemdPath + "/" + defaultTargetWants
|
|
sysSystemdWants = sysSystemdPath + "/" + defaultTargetWants
|
|
bindUnitFileName = "podman-mnt-bindings.service"
|
|
bindUserUnitPath = userSystemdPath + "/" + bindUnitFileName
|
|
bindUserUnitWant = userSystemdWants + "/" + bindUnitFileName
|
|
bindSysUnitPath = sysSystemdPath + "/" + bindUnitFileName
|
|
bindSysUnitWant = sysSystemdWants + "/" + bindUnitFileName
|
|
podmanSocketDropin = "podman.socket.d"
|
|
podmanSocketDropinPath = sysSystemdPath + "/" + podmanSocketDropin
|
|
)
|
|
|
|
const configBindServices = "mkdir -p " + userSystemdWants + " " + sysSystemdWants + " " + podmanSocketDropinPath + "\n" +
|
|
"ln -fs " + bindUserUnitPath + " " + bindUserUnitWant + "\n" +
|
|
"ln -fs " + bindSysUnitPath + " " + bindSysUnitWant + "\n"
|
|
|
|
const overrideSocketGroup = `
|
|
[Socket]
|
|
SocketMode=0660
|
|
SocketGroup=wheel
|
|
`
|
|
|
|
const wslInstallError = `Could not %s. See previous output for any potential failure details.
|
|
If you can not resolve the issue, and rerunning fails, try the "wsl --install" process
|
|
outlined in the following article:
|
|
|
|
http://docs.microsoft.com/en-us/windows/wsl/install
|
|
|
|
`
|
|
|
|
const wslOldVersion = `Automatic installation of WSL can not be performed on this version of Windows
|
|
Either update to Build 19041 (or later), or perform the manual installation steps
|
|
outlined in the following article:
|
|
|
|
http://docs.microsoft.com/en-us/windows/wsl/install\
|
|
|
|
`
|
|
|
|
const (
|
|
gvProxy = "gvproxy.exe"
|
|
winSSHProxy = "win-sshproxy.exe"
|
|
pipePrefix = "npipe:////./pipe/"
|
|
globalPipe = "docker_engine"
|
|
userModeDist = "podman-net-usermode"
|
|
rootfulSock = "/run/podman/podman.sock"
|
|
rootlessSock = "/run/user/1000/podman/podman.sock"
|
|
)
|