Notes on Installing SCO Open Desktop Release 3.0 in 2021

SCO UNIX was the successor to the Santa Cruz Operation‘s variant of Microsoft Xenix, derived from UNIX System V Release 3.2 with an infusion of Xenix device drivers and utilities. SCO UNIX System V/386 Release 3.2.0 was released in 1989, as the commercial successor to SCO Xenix. The base operating system did not include TCP/IP networking or X Window System graphics; these were available as optional extra-cost add-on packages. Shortly after the release of this bare OS, SCO shipped an integrated product under the name of SCO Open Desktop, or ODT. 1994 saw the release of SCO MPX, an add-on SMP package.

Having no suitable hardware, I will use VirtualBox to emulate a machine with very basic characteristics:

  • OS: Other/Unknown, 32bit
  • HDD: 512MB
  • RAM: 64MB
  • Network: PCnet-PCI II

Installation procedure

Installation is quite a straightforward but, probably a little annoying procedure due to the large number of diskettes that have to be inserted. Luckily, in the virtual environment, there is no need to do everything physically:

  • Create a VirtualBox guest machine with the above shown characteristics
  • Grab the OS distribution here: and extract files from 7-zip archive.
  • There is a file serial.txt with serial number/code – Sn: SOT552746, Ak: kqpzdsso which is for SCO Open Desktop Release 3.0
  • Distribution missed N1 boot disk. Grab it from SCO FTP server:, don’t mix it with the other boot disk which is for SCO UNIX OS: uod383bun1.Z. Uncompress the boot disk image and rename it just to look nicer:
$ uncompress uod383bon1.Z
$ mv uod383bon1 uod383bon1.img


  • Use Keyboard Mouse for the pointing device.
  • If you selected wrong mouse during installation, you probably unable to use X-window. Press Alt-F1 to switch to the first virtual terminal. Login as root and execute:
# mkdev mouse

to configure the mouse, rebuild kernel for the new device and update configs.

  • AHS/SLS directories contain *.ltr and *.doc files documenting installation procedure for each of the update bundle.

Posted in OS in the VirtualBox | Tagged , , , , | Leave a comment

NoneType issues in chains of inherited dictionaries in Python

There are good hints to avoid errors like:

AttributeError: 'NoneType' object has no attribute 'get'

in the brilliant Python tips 1: beware of Python dict.get() post.

Posted in Tips & tricks | Tagged , , , | Leave a comment

How to add/edit a userform in Excel on Mac?

Haha, surprise! There is no way to add or edit user forms on Mac since Excel 2011 🙂

Posted in IRL, Misc | Tagged , , , , | Leave a comment

CentOS Linux becomes beta RHEL?

According to the latest schedule, CentOS Linux reaches its End-of-Life in December 2021:

As it’s announced in the CentOS blog that “the future of the CentOS Project is CentOS Stream” which “tracks just ahead of a current RHEL release“, and its recommended:

If you are using CentOS Linux 8 in a production environment, and are concerned that CentOS Stream will not meet your needs, we encourage you to contact Red Hat about options.

Posted in IRL, Misc | Tagged , , | Leave a comment

It’s not on the approved list in Screen Time!

Dear Apple, how dare you demand me to approve internet sites I’m visiting via the… this… nasty Screen Time application?

Posted in IRL, Offtop | Tagged , , | Leave a comment

A single write locks the entire SQLite database for both: reading and writing

This fact is quite an unpleasant thing for a database with a lot of writes and relative seldom reads like, for example, a small packet capturing tool I write for my router.

The classical mechanics of SQLite locking is described here, but if you face the same problem as me, you probably would want to enable WAL – Write-ahead logging feature, which can solve the issue of SQLite DB locking:

The traditional rollback journal works by writing a copy of the original unchanged database content into a separate rollback journal file and then writing changes directly into the database file. In the event of a crash or ROLLBACK, the original content contained in the rollback journal is played back into the database file to revert the database file to its original state. The COMMIT occurs when the rollback journal is deleted.

The WAL approach inverts this. The original content is preserved in the database file and the changes are appended into a separate WAL file. A COMMIT occurs when a special record indicating a commit is appended to the WAL. Thus a COMMIT can happen without ever writing to the original database, which allows readers to continue operating from the original unaltered database while changes are simultaneously being committed into the WAL. Multiple transactions can be appended to the end of a single WAL file.

To enable WAL, execute:

sqlite> PRAGMA journal_mode=WAL;

Good news, it’s persistent and required to be run once.

Also additional tuning can be done, like setting: PRAGMA journal_size_limit=N, PRAGMA wal_checkpoint(<MODE>) or PRAGMA synchronous=FLAG, but it’s strongly advised to read documentation before changing something.

Finally, as always, remember to call sqlite3_finalize() after the prepared statement is no longer needed, or you risk locking the database which in the case of WAL leads to the checkpoint starvation and uncontrolled grows of the WAL file.

Posted in Tips & tricks | Tagged , , , , , , | Leave a comment

RAIDZ on-disk format vs. small blocks

Possible ZFS performance problems with small blocks, block alignment and much more explained by Mike Gerdts.

Posted in Copy-paste, Storage | Tagged , , , , , | Leave a comment

Modelling basic architectures of data storage systems

Nowadays majority of the modern and powerful block-level storage systems around the world are built to work in expensive Fibre Channel or more cheaper iSCSI SAN environments. Independent of their class, capacity and performance they are created on well-known principles, technologies and architectures. Furthermore some of these systems are using common servers for their controller hardware with Linux or even AIX as storage operating systems on-board.

In this paper I will describe some of the basic SAN oriented data storage architectures and also model their design using FreeBSD ( as the operating system and VirtualBox ( as the hardware emulator. All the specific FreeBSD solutions in this document are based on my BeaST storage architecture ( project publications.

Posted in BeaST, My projects | Tagged , , , , , , , | 1 Comment

What I have learned about science

Having a number of scientists in my family and after reading thousands of sci-fi stories in my youth, I always had some kind of romantic attitude to the topic. I used to think of scientists as the people whose lives are continuous adventures of explorers and researchers and who belong to a community with the only requirement – the thirst for knowledge, and the only prize – euphoria when you can’t hold back the exclamation of “Eureka” after discovering something new. Needless to say, “Bison”, the famous Nikolai Timofeev-Resovsky, was the impersonation of this ideal.

Much later, in the last university years, I started my career as a laboratory assistant of the Department of Mathematics and Statistics but quickly, after a couple of years, abandoned the path due to the science devaluation in Russia, mass corruption and general decline of the education system.

Since then, I have not had anything to do with science until the moment I tried to find a resource to publish my new paper about data storage architectures and their possible implementation using open-source code. Yes, the article was amazing, seriously, the text was (and still is) quite scientific, educational and potentially useful for IT engineers, it also looks pretty solid. I wanted it to be free and open for readers, but I thought of a larger audience than my personal blog can provide. So in my forties I called to arms my old beliefs and decided to try an IT scientific journal.

With a little googling, I quickly discovered that in general you must be a certified scientist to publish something in such a journal, because if you are not a certified scientist, you are not supposed to be able to conduct scientific research and, as a result, you cannot write an article of satisfactory quality. This works the similar way if you start from the other end: you must publish a research to be a scientist.

The best way to break the vicious circle is to submit your university email address to the online editorial system of the desired scientific journal. And you are not a scientist if you fail. Sad news for those, who as me, lost connections with the university years ago and can’t provide now a valid email address. However, appreciate the irony: I was the one at that time responsible for developing the whole Internet infrastructure of Alma mater including the email server as well as the pack of other servers and firewalls. But there is good news on the other hand, now we have a new definition: scientist (n.) – a person with approved email.

For those who, by all means, still want to prove they are scientists, there is an option to pay money for the article submission. I didn’t check if it works, but I don’t want to pay for something I want to share for free. Most probably, the journal will take the money. And who won’t? But from now on they will start calling you an independent researcher. Live with it.

As for me, I’m going to miss the opportunity to be a real scientist. Instead, I will post the article on some popular platform where it can be easily reached by the target audiences – IT-geeks prefer searching internet for the free information rather than paying money to journals for it.

Posted in Impressions, IRL, Offtop | Tagged , , | Leave a comment

The BeaST Grid storage early stage

I completely devoted my vacation to the development of the BeaST Grid family of my storage architecture and in the early days I was naive enough to plan a release. The Grid family was, and still is, the essential step for the whole BeaST architecture because I intended to use it as the cornerstone to develop and test the BeaST back-end arbitrator that manages drives or drive-nodes online connection/reconnection operation. The other reason to work on it is that the BeaST Grid doesn’t require direct drive attachment. This fact makes the Grid family more easy to use.


The BeaST Grid storage system architecture AS-to-BE

Any back-end operations are very sensitive because on any re-attachment of the known drives, GEOM framework by default starts automatic RAID recovering procedure on the both nodes simultaneous. This obviously leads to data corruption. So, the back-end arbitrator task is to prevent the storage system collapse.

Unfortunately, I have lost most of the time trying to stabilise the VirtualBox environment on my FreeBSD server, and I still experience issues with the virtual networks on it.

The second problem I happened to face was that the BeaST started to crash on all the failover operations. I checked and desperately reinstalled the BeaST and the whole environment multiple times, I even rewrote part of my BQ arbitrator daemon, but nothing helped. I was unsure as to what the real cause of the BeaST crashes was, whether it was my fault, the issues of the VirtualBox port or FreeBSD OS itself.

Loosing all my hopes I tested the most primitive operations of the CTL HA role switching and found the possible problem with CTL HA on the FreeBSD 12.x kernels. I still hope it is an issue of my setup, though the similar configuration works quite well on the FreeBSD 11.x. So, for now, I have to confess, the BeaST works on FreeBSD 11.x but not on 12.x. As good news, I can say, Allan Jude saw my post on Facebook and probably he well point out to me what’s happened with the CTL HA in 12.x.

Nevertheless, the time is already wasted and I have written only the early draft of the Grid family guide to fix the progress, which still doesn’t include the back-end arbitrator. The other point is, that the GEOM labels created on the client are propagated to the BeaST storage system. So, they can interfere with the storage configuration. And this is another task to be solved. Unfortunately, my vacation is almost at an end and I am afraid, I really won’t have enough free time until the winter break to implement all the changes.


The BeaST Grid Storage system architecture AS-IS

So, looking at the pictures, there are a lot of things to be done on the Christmas holidays to move the BeaST Grid from the AS IS state to the AS-to-BE one. I very much hope, I manage this 🙂

Posted in BeaST, BeaST Quorum, My projects, Storage | Tagged , , , , , , | Leave a comment