File entrypoint.sh of Package kvm-container
#!/bin/bash
#set -exuo pipefail
USER=tester
HOMEUSER=/home/${USER}
PS1NAME=VIRTU_BASE_CONTAINER
HPS1="\e[1;34m[\t]\e[1;31m \u@\h \e[1;32m${PS1NAME} \e[1;34m\w \e[m \n\e[1;31m#\e[m "
# check a process and run it if needed
check_process_and_run() {
PROCESS=$1
shift
args="$@"
# check number of line, if >=2 the process is running | ugly but enough for container
TEST=`ps -ax | grep ${PROCESS} | wc -l`
if [ ${TEST} -gt 1 ]; then
echo "${PROCESS} is running"
else
${PROCESS} "$@"
fi
}
# add a user "tester"
create_user() {
useradd --system -m -N -s /bin/bash ${USER} -G libvirt
mkdir -p ${HOMEUSER}/.ssh
touch ${HOMEUSER}/.ssh/authorized_keys
chmod 700 ${HOMEUSER}/.ssh
chmod 600 ${HOMEUSER}/.ssh/authorized_keys
echo "export PS1='${HPS1}'" >> ${HOMEUSER}/.bashrc
chown -R ${USER} ${HOMEUSER}
# Simple password for tester user
passwd tester <<EOF
opensuse
opensuse
EOF
pwconv
}
root_password() {
# enable ssh login for root user, default password is opensuse
# FIXME
passwd root <<EOF
opensuse
opensuse
EOF
}
# FIXME
# permit root login
# default port for ssh container access is 16022
configure_ssh() {
echo -e "Port 16022\nPermitEmptyPasswords no\nPermitRootLogin yes" >> /etc/ssh/sshd_config
/usr/sbin/sshd-gen-keys-start
/usr/sbin/sshd -t -f /etc/ssh/sshd_config
root_password
}
# shortcut for podman runlabel calls
if [ ! -z "$2" ];then
if [ $(basename "$2") = 'label-install' ] || [ $(basename "$2") = 'label-uninstall' ];then
exec "$@"
exit 0
elif [ $(basename "$2") = 'vmanager' ];then
exec "virt-manager"
exit 0
else
echo "No parameter label-install, label-uninstall or virt-manager found!"
echo $@
fi
fi
TEST=`grep tester /etc/passwd`
if [ -z "$TEST" ]; then
create_user
else
echo "User already present, skipping..."
fi
TEST=`grep 16022 /etc/ssh/sshd_config`
if [ -z "$TEST" ]; then
configure_ssh
else
echo "SSH already configured, skipping..."
fi
# Adjust PS1 for root user
if [ ! -f "/root/.bashrc" ]; then
echo "export PS1='${HPS1}'" >> /root/.bashrc
else
echo "PS1 for root already set, skipping..."
fi
LIBVIRTNET="/etc/libvirt/qemu/networks/default.xml"
if [ ! -f ${LIBVIRTNET} ]; then
# create a default for the VM
# PLEASE use virbr5 or adjust kvm-container.conf
cat > ${LIBVIRTNET} <<EOF
<network>
<name>default</name>
<uuid>f243d94b-bd5b-415d-b4c7-ccb78ec3dc9e</uuid>
<forward mode='nat'/>
<bridge name='virbr5' stp='on' delay='0'/>
<mac address='52:54:00:d0:61:e9'/>
<ip address='192.168.10.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.10.2' end='192.168.10.254'/>
</dhcp>
</ip>
</network>
EOF
else
echo "libvirtd default network already created, skipping..."
fi
# start all needed services
check_process_and_run /usr/sbin/sshd -f /etc/ssh/sshd_config -E /var/log/sshd.log
check_process_and_run virtlogd --daemon
check_process_and_run libvirtd --listen --daemon
virsh net-start default
# use for devel
sleep infinity