Oracle cloud – I lost my public IP

14 April 2022 a lot of Oracle Cloud users got an email stating their VM public IPs have been lost.

Read the easy step-by-step solution following the email below to get (new) public IPs for your virtual machines.

Oracle Cloud Infrastructure Virtual Cloud Network – Issue Identified impacting Public IPs
Oracle Cloud Infrastructure Customer,

We have identified an issue affecting a subset of customers who have become unable to access their Oracle Cloud Infrastructure resources.

Customer Impact: Some customers with Free Tier accounts, using Ephemeral or Reserved Public IPs will be unable to access their resources due to the unintentional reclamation of the IPs associated with their Virtual Machines.

While we have taken steps to ensure no further impact occurs, any affected Public IPs will need to be re-established by reassigning a new Public IP through the Oracle Cloud Infrastructure Console, REST API, SDK CLI or other tools, as described in the following documentation:

If a preferred public IP is configured, the public IP assignment may still be reassigned subject to its availability.

Assign a new IPv4 address to your virtual machines:
1. Log in to Oracle Cloud (you have the URL somewhere in an email)
2. Find your machines (the listing), menu: compute / instances
2b. You might have to select the compartment where your VMs are located, even if you only have the ‘root’ compartment.
3. In the machine list, click the machine name.
4. Scoll down to the “Resources” section (at the left edge), click “Attached VNICs”.
5. In the VNIC list, click the name (Primary VNIC).
6. Scroll down to “Resources”, and click “IPv4 Addresses”.
7. At the right side of the window, click the three dots (which are hidden beneath the “Support” icon), then click “Edit” from the menu that pops up.
8. Click the “Ephemeral public IP” option, fill in an optional name, then click “Update”

Now, the remaining steps are updating DNS for stuff pointing to the servers (if you have any), and updating connections (SSH) to reflect the new IP.

I revived “Quizzer”

Quizzer was written by me mostly in between 1999 and 2000. I wrote this system entirely in Perl (CGI script on a Solaris host) because there was no good enough applications out there. As this was a private project, I did no attempts to sell it (even if I had it prepared for that, see the extensive documentation).
You can find Quizzer up and running on
Documentation updated to some point in time:

Most of the question databases (plain text following some rules) were rewritten from existing resources, but the questions shown in the video is from what I wrote myself from reading the Solaris 8 System Admin manuals.

Preparing the new server for CGI execution

Besides my standard setup for a Linux server for Apache/PHP/MySQL, I also switched over to using fcgid and php-fpm to be able to use PHP 8.1 as default and use a per-directory or per-vhost configuration to switch over to PHP 7.4 when needed.
Enable CGI-execution module for Apache

a2enmod cgid

Enable CGI-execution for the virtual host
Add these lines to the virtual host configuration. The below additions also adjusts what is considered to be an index page and adds configuration to prevent downloading of files with some specific extensions (this should be done in the server main configuration).

  DirectoryIndex index.cgi index.php index.html index.htm
  <Directory /var/www/>
    AllowOverride All
    Options +ExecCGI
  AddHandler cgi-script .cgi
  <FilesMatch "\.(?:inc|pl|py|rb)$">
    Order allow,deny
    Deny from all

Check that CGI-script works
Use this simple CGI script to check that it works (test.cgi):

print "Content-type: text/html\n\n";
print "Hello, World.";

Also, the script has to be executable, then restart apache to reload configuration:

chmod 700 test.cgi
service apache2 restart

Updating the code for a new Perl version

(Screens from my actual code)
How to make Perl include files in the current directory

At some point in time, Perl got a security fix that no longer allows the current directory (the script directory) to be considered when including other code files. This broke my script badly.

There are several methods around this problem, and I ended up solving it my own way: I wrote a two-line wrapper for ‘/usr/bin/perl’, and saved it as ‘/usr/local/bin/perl’ (which was my command line in all scripts):

PERL_USE_UNSAFE_INC=1 /usr/bin/perl $1

This method required no modification of any of my source files to get them execute correctly and find their included files.

defined not allowed on array anymore
For some reason, it is no longer possible to use ‘defined @array’ to check if the variable has been set. So I had to replace every occurrence of the ‘defined @’ with just ‘@’, which made my code much more unreadable:



According to Perldoc:

After these modifications everything worked fine, except some small configuration mistakes of the quiz system itself (handling compressed question databases and pointing to some incorrect temporary locations).

Test it, use it if you wish

It took me some to find out how to create new users for storing personal test history. I had made this as simple as you just have to type in anything unique (not already registered) that looks like an email address, and a password you want to use.
The system sets up a demo account for you if that user name is not in use.
“Personal” history for the non-logged in demo user looks like this:
(upper part)

(graphical overview)

(detailed report)

The “Find a hole” challenge is off

As this is old revived code, and no reports of holes in the code were reported at the time it was online (1999-2002), I had to make a hole 🙂
This is valid as long as I make no new databases for the system (then if that happens, I decide what to do at that point).

Get full access to all UNIX questions
All m$ questions are available in demo mode, so no fully activated account needed for these. I recommend you create your own personal ‘demo’ account for the m$ questions to be able to view history.

So: simply use your external IP-address as the user name, and the password “FullAcccess2022” to give yourself a fully enabled user 🙂

Apollo Accelerators – Vampire

Apollo Core (68080)
Apollo Forum
Apollo Accelerators
Apollo Accelerators Wiki: Latest core (500, 600, 1200) | Installing Kickstarts
Vampire 500 V2: Part 1Part 2 (Epsilon’s Amiga Blog)
Checkmate A1500 Plus with Vampire 500V2 (Epsilon’s Amiga Blog)

The Complete Amiga 500 Vampire V500 V2+ Installation Guide (Amitopia)

My Vampire Card has arrived! (Lyonsden Blog)
Installing the Vampire V500 V2+ in my Amiga 500 (Lyonsden Blog)

AmiKit XE for Vampire V2 (AmiKit XE changelog) (Vampire PCB maker)
GOLD 3 Alpha
Quartus Prime (for flashing Vampire using USB Blaster)


Amiga Vampire CoffinOs – Quick setup and fun (Cotter’s Stuff)

Apollo Vampire – Emulation or Amiga AAA Salvation (Stephen Jones)

Episode 79 68080 Vampire install Amiga 2000 (Chris Edwards)

Amiga 500 Plus & Vampire 500 V2 + Follow Up (Dave’s Game Room)

8/16/2020 Demo of new Apollo OS with Manuel Jesus of Apollo Team, Tiny Bobble & EPIC Unboxing (Amiga Bill)

Email relaying – smarthost setup

Overview of alternatives for relaying emails

Free SMTP Servers for Sending Emails – 2021
Free SMTP Servers & Free SMTP Relay Services

Relaying emails using a Gmail account

Main disadvantages:

  • Low daily (24hr rolling) limit of 500 messages
  • Sends as (and takes replies on) the gmail account used for relaying

All limitations:

Setup guide for UNIX-like OSes (msmtp / msmtp-mta)

msmtp/msmtp-mta is a lightweight solution for relaying mail through gmail or any other external service.
I have successfully followed this guide:
Using MSMTP with Google SMTP Relay on Ubuntu 20.04 (DFT blog)
Another guide:
Use external SMTP server for system mails on Linux
See also:
msmtp documentation (Arch Linux Wiki)

Setup guide for multiple UNIX-ish OSes (for Postfix)

Quick setup (Ubuntu and other):

Gmail account: allow insecure apps

Required software: postfix and mailutils



Protect and process password file:

chmod 600 /etc/postfix/sasl_passwd
postmap /etc/postfix/sasl_passwd

Configure postfix:

relayhost = []:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

Restart Postfix

systemctl restart postfix.service


postfix stop
postfix start

WP plugin for setting sender name (address can not be changed): CB Mail Sender

Relaying emails using Elastic-Email

Elastic-Email is primarily a email marketing system like MailChimp, but can also act as a SMTP relay.

Main advantages:

  • Domains and email address can be confgured as approved senders, email will be sent using one of the confirmed senders
  • API available

Main disadvantages

  • Impossible to get rid of the “unsubscribe” link in every email sent
  • Tracking portions are added to links, and links are destroyed (no longer clickable) in the sent emails

Setup guide

WP plugin: Elastic Email Sender

Relaying through Oracle Cloud

Relaying mail from WordPress

The system-wide configurations and alternatives above work well for WordPress too, but you might want to finetune some settings for the emails being sent from WP. That includes the sender name, reply-to email, or you might even want to send these with another email account (or email relay service).
I found the plugin “Post SMTP Mailer/Email Log” (Post SMTP / PostmanSMTP) be the best suitable for this (there are many others available, so this might NOT be the best for everyone):

Misc data


GoTek jumper settings for MS-DIS




Recovering a lost session (it’s not possible, Chrome does not make copies of the “Current Session” and “Last Session” files), otherwise than being fast at the first startup after a crash. Session data is stored at AppData/Local (not Roaming as %AppData% points to)
%AppData%\..\Local\Google\Chrome\User Data\Default
In my last crash, I also had a “Default” folder inside the “Default” folder, containing session and history files.

Back up whatever is left of the session and history files. The files of interest is “Current Session”, “Last Session” and “History”. The “History” file is your last resort to recover, it could contain many months of visited pages and there is no way to tell which of those was in currently open and lost tabs.

Copy the “History” file to a real operating system which have sqlite3 available. Open the “History” database:

sqlite3 History

In sqlite3, set up csv export mode and filename:

.headers on
.mode csv
.output my-chrome-crash-history-timesort.csv
SELECT datetime(last_visit_time/1000000-11644473600,'unixepoch','localtime'), url FROM urls ORDER BY last_visit_time DESC;
.output my-chrome-crash-history-urlsort.csv
SELECT datetime(last_visit_time/1000000-11644473600,'unixepoch','localtime'), url FROM urls ORDER BY url;

Examine the files by your favorite calc program (LibreCalc).

Networking stuff




Pine Linux computer

Debian, live boot USB






Windows XP

RetroZilla – Web browser for XP and 95
MyPal – Web browser for XP



Regular expressions




Downloads, filelistings (apache autoindex)