aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog.md31
-rw-r--r--TODO.md14
-rwxr-xr-xkvmx59
-rwxr-xr-xkvmx-create2
-rwxr-xr-xshare/provision/debian/desktop-basic5
-rwxr-xr-xshare/provision/debian/web-full2
6 files changed, 84 insertions, 29 deletions
diff --git a/ChangeLog.md b/ChangeLog.md
index b99c8cf..a95f824 100644
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,19 +1,44 @@
# ChangeLog
-## 0.4.0 - Unreleased
+## 0.4.1 - 2024-12-17
+
+* Fixes the case when the virtual machine guest is registered under a
+ different name, other than the name of the project folder on
+ `__kvmx_initialize`.
+
+* Fixes VM name and folder logic handling on `kvmx_init`.
+
+## 0.4.0 - 2024-11-22
* Adds `kvmx sshdir` action, which SSH's to the guest and changes to a given
folder. If no arguments are given, it tries to change to the equivalent
- folder in the guest, so it can be a way to "cd" to the same directory but
+ folder in the guest, so it can be a way to `cd` to the same directory but
inside the guest.
If the folder in the host is also mounted in the guest in a similar
mountpoint, it's a handy way to move to the same folder, but inside the
guest.
- For folders inside $HOME, user name conversion is automatically done since
+ For folders inside $`HOME`, user name conversion is automatically done since
the user inside the guest might not match the user in the host.
+ Note: this is done in a best-effort basis. It might not work depending
+ on the remote shell in use. To increase the chances, it's suggested that
+ the remote shell's startup scripts support the `STARTUP_FOLDER` as
+ follows.
+
+ Example 1 (sh-compatible):
+
+ # Only change to the startup folder if it's set
+ if [ ! -z "$STARTUP_FOLDER" ]; then
+ cd $STARTUP_FOLDER
+ fi
+
+ Example 2 (sh-compatible):
+
+ # Make sure we start at the startup folder, defaulting to home
+ cd $STARTUP_FOLDER
+
## 0.3.0 - 2024-09-19
* Increase the maximum number of shared folders to avoid error in when KVMX
diff --git a/TODO.md b/TODO.md
index 06674f4..d6950ec 100644
--- a/TODO.md
+++ b/TODO.md
@@ -11,6 +11,11 @@
## Usability
+* [ ] Add a `cryptdisks` action to handle unlocking of encrypted volumes used
+ by a guest VM. The specific unlocking procedure should be configurable,
+ and the action must test whether the volume is available and not already
+ unlocked.
+
* [ ] Hard pause VM (--hard): besides pausing the process, also try to pause it
in the QEMU monitor.
@@ -39,6 +44,15 @@
* [ ] Support for per-guest `known_hosts` for SSH logins.
+* [ ] Support for storing guest VMs in (remote) repositories, with supporing
+ actions such as `repo`, `push`, `pull` etc.
+
+* [ ] Commands to run when the machine comes back from sleep.
+ But how to detect that the host (like a laptop) came out from
+ a sleep state? Maybe track the time lapses and run a command
+ if the interval is too high? Both the interval and the command
+ could be configurable.
+
## Virtualization
* [ ] Config option to [disable
diff --git a/kvmx b/kvmx
index a2578d8..01c9a0b 100755
--- a/kvmx
+++ b/kvmx
@@ -19,7 +19,7 @@
#
# Basic parameters
-VERSION="0.3.0"
+VERSION="0.4.1"
BASENAME="`basename $0`"
DIRNAME="`dirname $0`"
ACTION="$1"
@@ -106,7 +106,20 @@ function __kvmx_initialize {
# Check if second argument is a VM name or option
if [ -z "$2" ]; then
- VM="$(basename `pwd`)"
+ CANDIDATE_DEST="`pwd`/kvmxfile"
+ CANDIDATE_SRC="`find $GLOBAL_USER_CONFIG_FOLDER -lname $CANDIDATE_DEST | head -1`"
+
+ if [ ! -z "$CANDIDATE_SRC" ]; then
+ CANDIDATE_SRC="`basename $CANDIDATE_SRC`"
+ fi
+
+ # This covers the case when the VM is configured with a different name then the folder name
+ if [ ! -z "$CANDIDATE_SRC" ] ; then
+ VM="$CANDIDATE_SRC"
+ else
+ VM="$(basename `pwd`)"
+ fi
+
SHIFTARGS="1"
elif [ -e 'kvmxfile' ] && [ ! -e "$GLOBAL_USER_CONFIG_FOLDER/$2" ] && [ "$2" != "$(basename `pwd`)" ]; then
VM="$(basename `pwd`)"
@@ -1007,15 +1020,15 @@ function kvmx_sshdir {
#exit 1
fi
- DEST="$1"
+ DEST="$*"
# Defaults to the current folder
if [ -z "$DEST" ]; then
DEST="`pwd`"
# Fix ~/ path
- if echo $DEST | grep -q -e "^$HOME"; then
- DEST="$(echo $DEST | sed -e "s|^$HOME|/home/$SSH_LOGIN|")"
+ if echo "$DEST" | grep -q -e "^$HOME"; then
+ DEST="$(echo "$DEST" | sed -e "s|^$HOME|/home/$SSH_LOGIN|")"
fi
fi
@@ -1030,11 +1043,14 @@ function kvmx_sshdir {
# * https://stackoverflow.com/questions/626533/how-can-i-ssh-directly-to-a-particular-directory#626670
# * https://unix.stackexchange.com/questions/86941/how-to-ssh-into-a-specific-directory
#
- $ssh_env $SSH_COMMAND -t -p $SSH 127.0.0.1 "cd $DEST && exec \$SHELL --login"
+ #$ssh_env $SSH_COMMAND -t -p $SSH 127.0.0.1 "cd $DEST && exec \$SHELL --login"
# Implementation using approach 2, with a special environment variable
# STARTUP_FOLDER, which needs to be supported by the shell startup scripts
#$ssh_env $SSH_COMMAND -t -p $SSH 127.0.0.1 "export STARTUP_FOLDER=$DEST && exec \$SHELL --login"
+
+ # Implementation using approach 3: best effort, trying both approaches 1 and 2 at the same time
+ $ssh_env $SSH_COMMAND -t -p $SSH 127.0.0.1 "export STARTUP_FOLDER=$DEST && cd $DEST && exec \$SHELL --login"
}
# Enhanced SSH login into the guest
@@ -1242,6 +1258,7 @@ function kvmx_poweroff {
fi
echo "Rsyncing from guest: $poweroff_rsync_from_guest ($id)..."
+ mkdir -p $poweroff_rsync_from_guest_dest
kvmx_rsync_from $poweroff_rsync_from_guest_orig $poweroff_rsync_from_guest_dest
unset poweroff_rsync_from_guest_orig
@@ -1405,8 +1422,8 @@ function kvmx_rsync_to {
fi
# Fix ~/ path
- if echo $DEST | grep -q -e "^$HOME"; then
- DEST="$(echo $DEST | sed -e "s|^$HOME|/home/$SSH_LOGIN|")"
+ if echo "$DEST" | grep -q -e "^$HOME"; then
+ DEST="$(echo "$DEST" | sed -e "s|^$HOME|/home/$SSH_LOGIN|")"
fi
SSH="`cat $SSHFILE`"
@@ -1442,8 +1459,8 @@ function kvmx_rsync_from {
fi
# Fix ~/ path
- if echo $ORIG | grep -q -e "^$HOME"; then
- ORIG="$(echo $ORIG | sed -e "s|^$HOME|/home/$SSH_LOGIN|")"
+ if echo "$ORIG" | grep -q -e "^$HOME"; then
+ ORIG="$(echo "$ORIG" | sed -e "s|^$HOME|/home/$SSH_LOGIN|")"
fi
SSH="`cat $SSHFILE`"
@@ -1474,8 +1491,8 @@ function kvmx_scp_from {
fi
# Fix ~/ path
- if echo $ORIG | grep -q -e "^$HOME"; then
- ORIG="$(echo $ORIG | sed -e "s|^$HOME|/home/$SSH_LOGIN|")"
+ if echo "$ORIG" | grep -q -e "^$HOME"; then
+ ORIG="$(echo "$ORIG" | sed -e "s|^$HOME|/home/$SSH_LOGIN|")"
fi
SSH="`cat $SSHFILE`"
@@ -1506,8 +1523,8 @@ function kvmx_scp_to {
fi
# Fix ~/ path
- if echo $DEST | grep -q -e "^$HOME"; then
- DEST="$(echo $DEST | sed -e "s|^$HOME|/home/$SSH_LOGIN|")"
+ if echo "$DEST" | grep -q -e "^$HOME"; then
+ DEST="$(echo "$DEST" | sed -e "s|^$HOME|/home/$SSH_LOGIN|")"
fi
SSH="`cat $SSHFILE`"
@@ -1533,17 +1550,11 @@ function kvmx_upgrade {
# Initializes a new guest
function kvmx_init {
- FOLDER="$1"
-
- if [ -z "$FOLDER" ]; then
- if [ -z "$VM" ]; then
- VM="$(basename `pwd`)"
- FOLDER="$(dirname `pwd`)/$VM"
- else
- FOLDER="$(pwd)/$VM"
- fi
+ if [ -z "$1" ]; then
+ VM="$(basename `pwd`)"
+ FOLDER="$(dirname `pwd`)/$VM"
else
- VM="$FOLDER"
+ VM="$1"
if [ ! -z "$2" ]; then
FOLDER="$2"
diff --git a/kvmx-create b/kvmx-create
index c8b3992..9996be5 100755
--- a/kvmx-create
+++ b/kvmx-create
@@ -266,6 +266,8 @@ EOF
if [ "$distro" == "debian" ]; then
if [ "$version" != "sid" ] && [ "$version" != "experimental" ] && [ "$version" != "$NEXT_DEBIAN_RELEASE" ]; then
echo "deb http://security.debian.org/debian-security $version-security main contrib non-free" | $SUDO tee -a $WORK/etc/apt/sources.list > /dev/null
+ echo "deb https://deb.debian.org/debian/ $version-updates main contrib non-free" | $SUDO tee -a $WORK/etc/apt/sources.list > /dev/null
+ echo "deb-src https://deb.debian.org/debian/ $version-updates main contrib non-free" | $SUDO tee -a $WORK/etc/apt/sources.list > /dev/null
echo "deb-src http://security.debian.org/debian-security $version-security main contrib non-free" | $SUDO tee -a $WORK/etc/apt/sources.list > /dev/null
echo "deb https://deb.debian.org/debian/ $version-backports main contrib non-free" | $SUDO tee -a $WORK/etc/apt/sources.list > /dev/null
echo "deb-src https://deb.debian.org/debian/ $version-backports main contrib non-free" | $SUDO tee -a $WORK/etc/apt/sources.list > /dev/null
diff --git a/share/provision/debian/desktop-basic b/share/provision/debian/desktop-basic
index 2eeaf5d..2c5ea6d 100755
--- a/share/provision/debian/desktop-basic
+++ b/share/provision/debian/desktop-basic
@@ -46,7 +46,10 @@ apps/metadot/metadot deps-bundle desktop-basic
# Additional packages
echo "Installing additional desktop-basic packages..."
-$APT_INSTALL xpra lightdm firejail xsel tigervnc-viewer alsa-utils pulseaudio
+$APT_INSTALL lightdm firejail xsel alsa-utils pulseaudio
+
+# For host-guest interfacing
+$APT_INSTALL xpra tigervnc-viewer
# Tor Browser launcher
# Deprecated in favor of https://git.fluxo.info/utils-tor
diff --git a/share/provision/debian/web-full b/share/provision/debian/web-full
index 040d862..cb8f3c2 100755
--- a/share/provision/debian/web-full
+++ b/share/provision/debian/web-full
@@ -30,7 +30,7 @@ APT_INSTALL="sudo LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get install -y"
$DIRNAME/web-basic $HOSTNAME $DOMAIN $MIRROR
# Office Suite
-$APT_INSTALL libreoffice libreoffice-gtk3 gimp inkscape mat
+$APT_INSTALL libreoffice libreoffice-gtk3 gimp inkscape mat2
# Luakit using stowpkg
#if [ ! -x "$HOME/apps/stowpkg/tree/`uname -m`/bin/luakit" ]; then