3
0
Fork 0
forked from mirrors/nixpkgs

nixos-container-shell -> nixos-container { login | root-shell }

This commit is contained in:
Eelco Dolstra 2014-03-19 10:15:57 +01:00
parent 2ace7edb81
commit 0cca0f477f
2 changed files with 62 additions and 52 deletions

View file

@ -14,57 +14,13 @@ let
installPhase = "true"; installPhase = "true";
}; };
nixos-container-shell = pkgs.writeScriptBin "nixos-container-shell" nixos-container = pkgs.substituteAll {
'' name = "nixos-container";
#! ${pkgs.bash}/bin/sh -e dir = "bin";
isExecutable = true;
usage() { src = ./nixos-container.sh;
echo "Usage: $0 <container-name>" >&2 inherit (pkgs) bash socat;
echo " $0 (-r|--root-shell) <container-name>" >&2 };
}
args="`getopt --options 'r' -l help -- "$@"`"
eval "set -- $args"
rootShell=
while [ $# -gt 0 ]; do
case "$1" in
(--help) usage; exit 0;;
(-r|--root-shell) rootShell=1;;
(--) shift; break;;
(*) break;;
esac
shift
done
container="$1"
if [ -z "$container" ]; then
usage
exit 1
fi
shift
root="/var/lib/containers/$container"
if ! [ -d "$root" ]; then
echo "$0: container $container does not exist" >&2
exit 1
fi
if [ -n "$rootShell" ]; then
socket="$root/var/lib/root-shell.socket"
else
socket="$root/var/lib/login.socket"
fi
if ! [ -S "$socket" ]; then
echo "$0: socket $socket does not exist" >&2
exit 1
fi
if [ -n "$rootShell" ]; then
exec ${pkgs.socat}/bin/socat "unix:$socket" -
else
exec ${pkgs.socat}/bin/socat "unix:$socket" -,echo=0,raw
fi
'';
in in
@ -299,7 +255,7 @@ in
${cfg.localAddress} ${name}.containers ${cfg.localAddress} ${name}.containers
'') config.containers); '') config.containers);
environment.systemPackages = optional (config.containers != {}) nixos-container-shell; environment.systemPackages = optional (config.containers != {}) nixos-container;
}; };
} }

View file

@ -0,0 +1,54 @@
#! @bash@/bin/sh -e
usage() {
echo "Usage: $0 login <container-name>" >&2
echo " $0 root-shell <container-name>" >&2
}
args="`getopt --options '' -l help -- "$@"`"
eval "set -- $args"
while [ $# -gt 0 ]; do
case "$1" in
(--help) usage; exit 0;;
(--) shift; break;;
(*) break;;
esac
shift
done
action="$1"
if [ -z "$action" ]; then usage; exit 1; fi
shift
getContainerRoot() {
root="/var/lib/containers/$container"
if ! [ -d "$root" ]; then
echo "$0: container $container does not exist" >&2
exit 1
fi
}
if [ $action = login ]; then
container="$1"
if [ -z "$container" ]; then usage; exit 1; fi
shift
getContainerRoot
exec @socat@/bin/socat "unix:$root/var/lib/login.socket" -,echo=0,raw
elif [ $action = root-shell ]; then
container="$1"
if [ -z "$container" ]; then usage; exit 1; fi
shift
getContainerRoot
exec @socat@/bin/socat "unix:$root/var/lib/root-shell.socket" -
else
echo "$0: unknown action $action" >&2
exit 1
fi