mirror of
https://code.forgejo.org/actions/setup-forgejo
synced 2025-07-07 09:15:59 +02:00
sync lxc-helpers b0766388a2624bc56258053576c7c09dba2e7cf5
This commit is contained in:
parent
fa46839e6a
commit
6a5ec6ba37
2 changed files with 428 additions and 0 deletions
129
lxc-helpers.sh
Executable file
129
lxc-helpers.sh
Executable file
|
@ -0,0 +1,129 @@
|
|||
#!/usr/bin/env bash
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
set -e
|
||||
|
||||
source $(dirname $0)/lxc-helpers-lib.sh
|
||||
|
||||
function verbose() {
|
||||
set -x
|
||||
PS4='${BASH_SOURCE[0]}:$LINENO: ${FUNCNAME[0]}: '
|
||||
LXC_VERBOSE=true
|
||||
}
|
||||
|
||||
function help() {
|
||||
cat <<'EOF'
|
||||
lxc-helpers - LXC container management helpers
|
||||
|
||||
SYNOPSIS
|
||||
|
||||
lxc-helpers [-v|--verbose] [-h|--help]
|
||||
[-o|--os {bookworm|bullseye} (default bookworm)]
|
||||
command [arguments]
|
||||
|
||||
DESCRIPTION
|
||||
|
||||
A thin shell based layer on top of LXC to create, populate, run and
|
||||
destroy LXC containers. A container is created from a copy of an
|
||||
existing container.
|
||||
|
||||
CREATE AND DESTROY
|
||||
|
||||
lxc_prepare_environment
|
||||
|
||||
Install LXC dependencies.
|
||||
|
||||
lxc_template_release
|
||||
|
||||
Echo the name of the container for the Operating System
|
||||
specified with `--os`.
|
||||
|
||||
lxc_build_template `existing_container` `new_container`
|
||||
|
||||
Copy `existing_container` into `new_container`. If
|
||||
`existing_container` is equal to $(lxc_template_release) it
|
||||
will be created on demand.
|
||||
|
||||
lxc_container_mount `name` `path`
|
||||
|
||||
Configure `name` container to bind mount `path` so that it is
|
||||
also accessible at `path` from within the container.
|
||||
|
||||
lxc_container_start `name`
|
||||
|
||||
Start the `name` container.
|
||||
|
||||
lxc_container_stop `name`
|
||||
|
||||
Unmount all bind mounted directories and stop the `name`
|
||||
container.
|
||||
|
||||
lxc_container_destroy `name`
|
||||
|
||||
Call lxc_container_stop `name` and destroy the container.
|
||||
|
||||
ACTIONS IN THE CONTAINER
|
||||
|
||||
For some command lxc_something `name` that can be called from outside the container
|
||||
there is an equivalent function lxc_something_inside that can be called from inside
|
||||
the container.
|
||||
|
||||
lxc_install_lxc `name` `prefix`
|
||||
lxc_install_lxc_inside `prefix`
|
||||
|
||||
Install LXC in the `name` container to allow the creation of
|
||||
named containers. `prefix` is a class C IP prefix from which
|
||||
containers will obtain their IP (for instance 10.40.50).
|
||||
|
||||
lxc_container_run_script `name` `path`
|
||||
lxc_container_run_script_as `name` `user` `path`
|
||||
|
||||
Run the script found at `path` within the `name` container. The
|
||||
environment is cleared before running the script. The first form
|
||||
will run as root, the second form will impersonate `user`.
|
||||
|
||||
lxc_container_user_install `name` `user_id` `user` [`homedir` default `/home`]
|
||||
|
||||
Create the `user` with `user_id` in the `name` container with a
|
||||
HOME at `/homedir/user`. Passwordless sudo permissions are
|
||||
granted to `user`. It is made a member of the groups docker, kvm
|
||||
and libvirt if they exist already. A SSH key is created.
|
||||
|
||||
Example: lxc_container_user_install mycontainer $(id -u) $(USER)
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
function main() {
|
||||
local options=$(getopt -o hvo --long help,verbose,os: -- "$@")
|
||||
[ $? -eq 0 ] || {
|
||||
echo "Incorrect options provided"
|
||||
exit 1
|
||||
}
|
||||
eval set -- "$options"
|
||||
while true; do
|
||||
case "$1" in
|
||||
-v | --verbose)
|
||||
verbose
|
||||
;;
|
||||
-h | --help)
|
||||
help
|
||||
;;
|
||||
-o | --os)
|
||||
LXC_CONTAINER_RELEASE=$2
|
||||
shift
|
||||
;;
|
||||
--)
|
||||
shift
|
||||
break
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
lxc_maybe_sudo
|
||||
|
||||
"$@"
|
||||
}
|
||||
|
||||
main "$@"
|
Loading…
Add table
Add a link
Reference in a new issue