Waiting for VirtualBox guests to close before reboot or shutdown

See this and this. Basically:

vim /etc/init.d/virtualbox
chmod +x /etc/init.d/virtualbox
update-rc.d virtualbox defaults

The /etc/init.d/virtualbox script should look like this:

#!/bin/sh

# 2017-08-07 jj5 - SEE: How make Debian wait for all VirtualBox guests to
# stop during shutdown/reboot?: https://superuser.com/a/929292/615689

### BEGIN INIT INFO
# Provides:          virtualbox_start_and_stop
# Required-Start:    $local_fs $network
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: 
# Description:       Start virtualbox on boot, and shutdown safely on shutdown/reboot.
### END INIT INFO

case "$1" in
  start)
    echo "Starting Virtualbox "

    # Do whatever to start or resume your virtualbox instances.
    # Perhaps look for a txt file someplace with VMs that need to be
    # restarted or resumed... then start 'em.
    ;;
  stop)
    echo "Stopping Virtualbox"

    # Do something to either shutdown or savestate your virtualbox instances.
    # maybe also save the instances that should be resumed into a txt file
    # someplace for the start method above.

    # 2017-08-07 jj5 - SEE:
    # https://askubuntu.com/a/457564

    # 2017-08-07 jj5 - NOTE: You should make sure that ACPI Shutdown actually
    # shuts down the guest...
    # 2017-08-07 jj5 - SEE: Force Ubuntu Desktop to shutdown on power button:
    # https://www.progclub.org/blog/2017/08/07/force-ubuntu-desktop-to-shutdown-on-power-button-keypress-acpi-shutdown/

    while [ -n "$( sudo -u jj5 VBoxManage list runningvms )" ]; do

      sudo -u jj5 VBoxManage list runningvms \
        | sed -r 's/.*\{(.*)\}/\1/' \
        | xargs -L1 -I {} sudo -u jj5 VBoxManage controlvm {} acpipowerbutton;

      sleep 1;

    done;

    ;;
  *)
    echo "Usage: /etc/init.d/virtualbox {start|stop}"
    exit 1
    ;;
esac

exit 0

You may also need to Force Ubuntu Desktop to shutdown on power button keypress

Empowerment

This theme has sprung into my head a little over the past few weeks, as I’ve just started a club with a view to “empowering” programmers, and it’s apt that I reflect on what that means. So, while I smoke my cigarettes, it’s one of the things I think about. And, as I’ve been thinking about it, I’ve had a few thoughts! Go figure.

Anyway, this is still all a little rough, and this post is only my first step in solidifying these thoughts, but here they are.

Traditionally I’m a “Microsoft” programmer. The other kids used to tease me about it. Actually, I copped it at each end, because all the other Microsoft programmers used to tease me and call me a bleeding heart open-source sympathising commie. There’s no winning. Especially if you’re a “Microsoft” programmer.

Over the past few months I’ve been doing a fair bit with PHP. I figure there are so many great PHP web-apps that PHP can’t be all bad, despite its reputation for being shoddy and insecure. I mean, they teased me for being a “Microsoft” programmer, so they can tease me for being a PHP programmer too if they want. I’ve got pretty thick skin by now. And besides, we all know who the world’s leading authority on programmer fashion is: me. So, I’m clearly authoritative enough that I can roll my own way and set my own trends.

I’ve digressed. I do that. What was I talking about again? Oh, yeah. Empowerment. So, here’s the thing about coming to Linux, and PHP, and open-source in general: it makes you feel powerful. And that’s thought number one: where commercial software vendors like Microsoft and Apple hoard power, open-source programmers give it away. And, they give it to *you*. It makes sense when you think about it. Commercial entities survive on commerce, and there’s only commerce when there are goods and services that customers “depend” on. A commercial software vendor might pay lip-service to “empowering” you, but what they really want is for you to become “dependant” on them, which is the opposite of being empowered.

I’ll give you an example. The other day I wanted to package my new library into a download file. So I decided to go with a .tar.gz and use the tar command to create the file. I scripted my packaging process, and everything was functional in a matter of minutes. A lovely experience of empowerment. Compare this to my every day experience using WinZip. I used to own a copy, but I haven’t bothered to get a new license, and the copy I’m running on my Windows machine at the moment is an evaluation version. Consequently, every time I need to unzip a file, I need to click the button that says “Use evaluation version”, and as if to insult me, the developers thought it would be a good idea to move that button around at random and play a game with me every time I try to get something done. Of course I have WinZip because the default decompression software built into Windows doesn’t handle .tar.gz files. My point here is that in Windows, I’m not very empowered at all. The only way I’ll get a little bit of power is to part with some more money, and then maybe WinZip will start working for me rather than against me. But, even after spending my money, I still wouldn’t have a command-line tool that allowed me to script the compression of my package in a matter of seconds (well, minutes, I’m still new so I had to lookup how to use the tar command, and then trial-and-error my way into getting the right directory structure inside the tarball). This is just one example. I have many more. But I suspect you get the idea, so I won’t elaborate. In case you didn’t get the idea, here it is again: commercial programmers hoard power, and open-source programmers give it away.

This “giving power away” thing is a pretty big cultural change. There’s almost something scary about it. Sometimes I worry that maybe I’m naive, and that maybe other people shouldn’t be empowered. Maybe if they’re empowered then they’ll come after *me* with their new power. Maybe it would be better if I made people need me. I’m pretty sure that’s how *they* think. But… after giving it some thought, I still come down on the side of giving power away. I just think that not only is it the more noble thing to do, it’s also the more practical thing to do. I worry about safety and security too, I just figure I’m likely to be safer and more secure if the people around me are more, rather than less, powerful. I figure that for every more powerful evil person there will be two more powerful good people, and the good will outweigh the bad. There might be a little conflict and a few casualties on the path, but wasn’t there always? So, that’s thought number two: it is better to give power away.

To recap:

  1. Commercial programmers don’t give power away
  2. Open-source programmers do give power away
  3. It’s better to give power away

And those are my thoughts so far. Thanks for reading!