89 lines
2.0 KiB
Bash
Executable File
89 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
source=$1
|
|
hostname=$2
|
|
if [[ -v 3 ]];then
|
|
convert=true;else
|
|
convert=false;fi
|
|
|
|
cat << end
|
|
source=$source
|
|
hostname=$hostname
|
|
convert=$convert
|
|
end
|
|
|
|
mkdir -p /run/nspawn-oci
|
|
|
|
skopeo_output=$(echo /run/nspawn-oci/$source | sed s.://./.g)
|
|
#mkdir -p $skopeo_output
|
|
#skopeo copy $source oci:$skopeo_output:latest
|
|
|
|
umoci_output=/run/nspawn-oci/$hostname
|
|
#rm -rf $umoci_output
|
|
#umoci --verbose unpack --image $skopeo_output $umoci_output
|
|
|
|
oci_config=$umoci_output/config.json
|
|
|
|
if $convert;then
|
|
# nspawn mode
|
|
mkdir -p /etc/systemd/nspawn
|
|
nspawn_config=/etc/systemd/nspawn/$hostname.nspawn
|
|
|
|
cat << end > $nspawn_config
|
|
[Exec]
|
|
ProcessTwo=true
|
|
end
|
|
|
|
for environment in $(jq --compact-output '.process.env' $oci_config | sed "s/[][]//g;s/\"//g;s/,/ /g")
|
|
do
|
|
echo $environment
|
|
cat << end >> $nspawn_config
|
|
Environment=$environment
|
|
end
|
|
done
|
|
|
|
cat << end >> $nspawn_config
|
|
WorkingDirectory=$(jq --compact-output '.process.cwd' $oci_config | sed "s/[][]//g;s/\"//g;s/,/ /g")
|
|
Parameters=$(jq --compact-output '.process.args' $oci_config | sed "s/[][]//g;s/,/ /g")
|
|
|
|
[Network]
|
|
VirtualEthernet=no
|
|
|
|
[Files]
|
|
end
|
|
|
|
for mount in $(jq -c '.mounts[]' $oci_config); do
|
|
source=$(echo $mount | jq -r '.source' )
|
|
echo $source
|
|
if [ $source == 'none' ]; then
|
|
echo 'container requires bind mount'
|
|
destination=$(echo $mount | jq -r '.destination')
|
|
read -p "$destination:" source
|
|
cat << end >> $nspawn_config
|
|
Bind=$source:$destination
|
|
end
|
|
fi
|
|
done
|
|
|
|
machinectl import-fs $umoci_output/rootfs $2
|
|
echo "Edit $nspawn_config before starting"
|
|
|
|
else
|
|
# oci mode
|
|
mkdir -p /etc/systemd/system/systemd-nspawn@$hostname.service.d/
|
|
override=/etc/systemd/system/systemd-nspawn@$hostname.service.d/override.conf
|
|
cat << end > $override
|
|
[Service]
|
|
ExecStart=systemd-nspawn --oci-bundle=/var/lib/machines/%i --machine %i
|
|
end
|
|
|
|
machinectl import-fs $umoci_output $hostname
|
|
echo "Edit /var/lib/machines/$hostname/config.json before starting"
|
|
|
|
fi
|
|
|
|
cat << end
|
|
Start/Enable with systemd-nspawn@$hostname.service
|
|
$hostname created from $source
|
|
end |