|
1 | 1 | # Container will continue running on exit |
2 | 2 | # Remove with `podman kill zisk-dev && podman rm zisk-dev` |
3 | 3 | {pkgs, ...}: |
4 | | -pkgs.writeShellScriptBin "zisk-shell" '' |
5 | | - set -e |
| 4 | + pkgs.writeShellScriptBin "zisk-shell" '' |
| 5 | + set -e |
6 | 6 |
|
7 | | - CONTAINER_NAME="''${ZISK_CONTAINER_NAME:-zisk-dev}" |
8 | | - IMAGE_NAME="''${ZISK_IMAGE:-localhost/cargo-zisk:latest}" |
9 | | - SHELL="''${ZISK_SHELL:-/bin/bash}" |
| 7 | + CONTAINER_NAME="''${ZISK_CONTAINER_NAME:-zisk-dev}" |
| 8 | + IMAGE_NAME="''${ZISK_IMAGE:-localhost/cargo-zisk:latest}" |
| 9 | + SHELL="''${ZISK_SHELL:-/bin/bash}" |
10 | 10 |
|
11 | | - # Check if container exists |
12 | | - if ${pkgs.podman}/bin/podman container exists "$CONTAINER_NAME"; then |
13 | | - # Container exists, check if it's running |
14 | | - STATUS=$(${pkgs.podman}/bin/podman inspect -f '{{.State.Status}}' "$CONTAINER_NAME") |
| 11 | + DEVICE= |
| 12 | + KEY= |
| 13 | + SETUP=0 |
15 | 14 |
|
16 | | - if [ "$STATUS" != "running" ]; then |
17 | | - echo "Starting stopped container: $CONTAINER_NAME" |
18 | | - ${pkgs.podman}/bin/podman start "$CONTAINER_NAME" |
| 15 | + usage() { |
| 16 | + cat <<EOF |
| 17 | + Usage: zisk-shell [OPTIONS] |
| 18 | +
|
| 19 | + Enter a shell in the Zisk container. If setup options are passed, ziskup is |
| 20 | + run inside the container before the shell starts (use this to install or |
| 21 | + switch CPU/GPU binaries and setup keys). |
| 22 | +
|
| 23 | + Options: |
| 24 | + --gpu, --cpu Select GPU or CPU binaries |
| 25 | + --key KEY Setup key: proving | proving-no-consttree | verify | none |
| 26 | + --provingkey Shortcut for --key proving |
| 27 | + --verifykey Shortcut for --key verify |
| 28 | + --nokey Shortcut for --key none |
| 29 | + -h, --help Show this help |
| 30 | +
|
| 31 | + Environment: |
| 32 | + ZISK_CONTAINER_NAME (default: zisk-dev) |
| 33 | + ZISK_IMAGE (default: localhost/cargo-zisk:latest) |
| 34 | + ZISK_SHELL (default: /bin/bash) |
| 35 | + EOF |
| 36 | + } |
| 37 | +
|
| 38 | + while [ $# -gt 0 ]; do |
| 39 | + case "$1" in |
| 40 | + --gpu) DEVICE=gpu; SETUP=1; shift ;; |
| 41 | + --cpu) DEVICE=cpu; SETUP=1; shift ;; |
| 42 | + --key) KEY="$2"; SETUP=1; shift 2 ;; |
| 43 | + --provingkey) KEY=proving; SETUP=1; shift ;; |
| 44 | + --verifykey) KEY=verify; SETUP=1; shift ;; |
| 45 | + --nokey) KEY=none; SETUP=1; shift ;; |
| 46 | + -h|--help) usage; exit 0 ;; |
| 47 | + *) |
| 48 | + echo "zisk-shell: unknown option: $1" >&2 |
| 49 | + usage >&2 |
| 50 | + exit 1 |
| 51 | + ;; |
| 52 | + esac |
| 53 | + done |
| 54 | +
|
| 55 | + if [ -n "$KEY" ]; then |
| 56 | + case "$KEY" in |
| 57 | + proving|proving-no-consttree|verify|none) ;; |
| 58 | + *) |
| 59 | + echo "zisk-shell: invalid --key value: $KEY" >&2 |
| 60 | + exit 1 |
| 61 | + ;; |
| 62 | + esac |
| 63 | + fi |
| 64 | +
|
| 65 | + PODMAN=${pkgs.podman}/bin/podman |
| 66 | +
|
| 67 | + # Check if container exists |
| 68 | + if "$PODMAN" container exists "$CONTAINER_NAME"; then |
| 69 | + STATUS=$("$PODMAN" inspect -f '{{.State.Status}}' "$CONTAINER_NAME") |
| 70 | +
|
| 71 | + if [ "$STATUS" != "running" ]; then |
| 72 | + echo "Starting stopped container: $CONTAINER_NAME" |
| 73 | + "$PODMAN" start "$CONTAINER_NAME" |
| 74 | + else |
| 75 | + echo "Container $CONTAINER_NAME is already running" |
| 76 | + fi |
19 | 77 | else |
20 | | - echo "Container $CONTAINER_NAME is already running" |
| 78 | + echo "Creating new container: $CONTAINER_NAME" |
| 79 | + "$PODMAN" run -dit \ |
| 80 | + --name "$CONTAINER_NAME" \ |
| 81 | + --privileged \ |
| 82 | + --ulimit memlock=-1:-1 \ |
| 83 | + --ipc=host \ |
| 84 | + "$IMAGE_NAME" \ |
| 85 | + "$SHELL" |
21 | 86 | fi |
22 | | - else |
23 | | - # Container doesn't exist, create it in detached mode |
24 | | - echo "Creating new container: $CONTAINER_NAME" |
25 | | - ${pkgs.podman}/bin/podman run -dit \ |
26 | | - --name "$CONTAINER_NAME" \ |
27 | | - --privileged \ |
28 | | - --ulimit memlock=-1:-1 \ |
29 | | - --ipc=host \ |
30 | | - "$IMAGE_NAME" \ |
31 | | - "$SHELL" |
32 | | - fi |
33 | | -
|
34 | | - # Enter the container using exec |
35 | | - echo "Entering container... (container will persist after exit)" |
36 | | - ${pkgs.podman}/bin/podman exec -it "$CONTAINER_NAME" "$SHELL" |
37 | | -'' |
| 87 | +
|
| 88 | + if [ "$SETUP" -eq 1 ]; then |
| 89 | + ZISKUP_ARGS= |
| 90 | + [ "$DEVICE" = "gpu" ] && ZISKUP_ARGS="$ZISKUP_ARGS --gpu" |
| 91 | + [ "$DEVICE" = "cpu" ] && ZISKUP_ARGS="$ZISKUP_ARGS --cpu" |
| 92 | + ENV_ARGS= |
| 93 | + if [ -n "$KEY" ]; then |
| 94 | + ENV_ARGS="-e SETUP_KEY=$KEY" |
| 95 | + fi |
| 96 | + echo "Running ziskup in container (device=''${DEVICE:-default}, key=''${KEY:-default})" |
| 97 | + # shellcheck disable=SC2086 |
| 98 | + "$PODMAN" exec -it $ENV_ARGS "$CONTAINER_NAME" \ |
| 99 | + /root/.zisk/bin/ziskup $ZISKUP_ARGS |
| 100 | + fi |
| 101 | +
|
| 102 | + echo "Entering container... (container will persist after exit)" |
| 103 | + "$PODMAN" exec -it "$CONTAINER_NAME" "$SHELL" |
| 104 | + '' |
0 commit comments