diff options
Diffstat (limited to '.local/bin/lxc-build')
-rwxr-xr-x | .local/bin/lxc-build | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/.local/bin/lxc-build b/.local/bin/lxc-build new file mode 100755 index 0000000..9e6b5eb --- /dev/null +++ b/.local/bin/lxc-build @@ -0,0 +1,83 @@ +#!/usr/bin/env runhaskell + +import System.Console.GetOpt +import System.Environment +import System.Exit +import System.Process + +version :: Fractional p => p +version = 0.01 + +help :: [Char] +help = unlines + [ "" + , "NAME" + , "" + , " lxc-build" + , "" + , "SYNOPSIS" + , "" + , " Replace a container of the same name with the new build" + , "" + , " lxc-build --replace --name rockylinux rockylinux8.dockerfile" + , "" + , "DESCRIPTION" + , "" + , " Builds a lxc container from a Dockerfile" + , "" + , "COMMANDS" + , "" + , " -h, -help, --help Shows this help menu" + , " -r, -replace, --replace Replace container with new build" + , " -v, -version, --version Prints program version" + ] + +display = putStrLn + +main = do + arguments <- getArgs + case arguments of + ["--replace", "--name", name, dockerfile] -> do + callCommand ("\\lxc-destroy --force --name " ++ name ++ " |& \\true") + callCommand + ( "\\lxc-create --name " + ++ name + ++ " --template=none && \\mkdir ~/.local/share/lxc/" + ++ name + ++ "/rootfs" + ) + callCommand ("\\docker build --file " ++ dockerfile) + callCommand + ( "id=$(\\docker run --detach \"$(\\docker build --file " + ++ dockerfile + ++ " | tail --lines=1)\" /bin/true) && \\docker export \"$id\" | \\tar --extract --directory ~/.local/share/lxc/" + ++ name + ++ "/rootfs && \\docker container rm \"$id\"" + ) + callCommand + ( "\\printf 'doas chown --recursive 200000:200000 ~/.local/share/lxc/" + ++ name + ++ "/rootfs\n'" + ) + callCommand + ( "\\doas chown --recursive 200000:200000 ~/.local/share/lxc/" + ++ name + ++ "/rootfs" + ) + callCommand + ( "\\printf 'lxc.uts.name = " + ++ name + ++ "\n' >> ~/.local/share/lxc/" + ++ name + ++ "/config" + ) + callCommand + ( "\\printf \"lxc.rootfs.path = dir:$HOME/.local/share/lxc/" + ++ name + ++ "/rootfs\n\" >> ~/.local/share/lxc/" + ++ name + ++ "/config" + ) + callCommand ("\\lxc-start --name " ++ name) + _ -> do + die help |