DOSBox-X on Debian 10 — compiling and running

Tried installing using alien and the rpm file:

Download from https://github.com/joncampbell123/dosbox-x/releases. (The version numbers in the file names below were current at the time of writing, but they change rapidly.)

For example:

$ cd installs/
$ mkdir dosbox-x
$ cd dosbox-x/
$ wget https://github.com/joncampbell123/dosbox-x/releases/download/dosbox-x-v0.82.25/dosbox-x-0.82.25-0.el7.x86_64.rpm
$ sudo apt install alien
$ sudo alien dosbox-x-0.82.25-0.el7.x86_64.rpm
$ sudo dpkg -i dosbox-x_0.82.25-1_amd64.deb
$ dosbox-x

But,

dosbox-x: error while loading shared libraries: libpng15.so.15: cannot open shared object file: No such file or directory

Thresh around a bit:

$ sudo apt install debian-goodies libpng-tools libpng-dev libpnglite0 libpnglite-dev

Yeah, nah, as expected.

Enough for now. Might as well try the source — the build arrangements for this seem very thoroughly sorted out:

$ wget https://github.com/joncampbell123/dosbox-x/archive/dosbox-x-v0.82.25.tar.gz

Unpack and cd into new directory, then install some dependencies:

$ cd dosbox-x-dosbox-x-v0.82.25
$ sudo apt install libavutil-dev libavcodec-dev libavformat-dev libswscale-dev

(Your system may have these, or not, or be missing other things that mine has. If you see a line “/usr/bin/ld: cannot find -labcdefg” then go to https://packages.debian.org and search for abcdefg. Chances are, it is a package called libabcdefg-dev.)

$ sudo ./build-debug
$ ./src/dosbox-x

Note: DO NOT manually run ./configure and make — it will not work!

And here it is:

First run of dosbox-x
Note the pull-down menus it gives you

The example conf file refers to a [printer] section, but there is none! Based on DOSBox SVN-Daum (no longer maintained as far as I can tell), it is meant to be just before the [parallel] section, something like this (my changes noted by #DJG):

[printer]
# printer: Enable printer emulation.
# dpi: Resolution of printer (default 360).
# width: Width of paper in 1/10 inch (default 85 = 8.5'').
# height: Height of paper in 1/10 inch (default 110 = 11.0'').
# printoutput: Output method for finished pages:
# png : Creates PNG images (default)
# ps : Creates Postscript
# bmp : Creates BMP images (very huge files, not recommend)
#
# multipage: Adds all pages to one Postscript file or printer job until CTRL-F2 is pressed.
# docpath: The path where the output files are stored.
# timeout: (in milliseconds) if nonzero: the time the page will
# be ejected automatically after when no more data
# arrives at the printer.
printer=true
#DJG
dpi=300
#width=85
#height=110
width=82.7
height=116.9
# DJG
printoutput=ps
# DJG
multipage=true
docpath=.
# DJG
timeout=100

Having said that, it may not be needed at all!

Have not fully tested yet.

gulp

Dodgy SD card

Micro SD card was fine. Plugged an external USB WD HDD into the same computer and it unmounted the SD card and now the SD card keeps making itself read only. Computer did something strange to it. Was FAT32. If made into NTFS, it works — but no good in a lot of devices that don’t read NTFS.

To make it NTFS:

$ sudo mkfs.ntfs /dev/sdg1

And it’s all nice; but no good in the phone! Android should read ext3, ext4 and FAT32, but none of these is well-behaved when it comes to the file system suddenly becoming read-only. What to do?

What if we  use gparted to shrink the NTFS partition and create a new ext4 one, but leave the NTFS there?

OK, what if we try a GPT partition table. Then an ext4 file system. Nope.

flush operating system cache of /dev/sdf  00:00:07    ( ERROR )

Let’s zero the stick:

$ sudo dd if=/dev/zero of=/dev/sdf bs=512 count=1

But still fails after make GPT and ask for ext4.

Try NTFS again.

OK, so in summary: formatting as NTFS might get some extra life out of a failing flash card, but will also reduce it breadth of use.

But we have one more trick up our sleeve — I put the microSD card in one of those adapters that fit it into a full-size SD card slot and put it into a digital camera. Used the camera menus to ask for a low-level format, and lo and behold it now works.

In my case, the camera was already using a micro SD in an adapter, so I left the dodgy one in the camera and put the camera one in my phone.

 

Camera!

Useful fiction rejection

Punted a story to James Gunn’s Ad Astra. They took a couple of months to bounce it, but the reply was both friendly and helpful — pithy, as befits busy people, but at least giving a reason for the rejection and a suggestion as to what to do to remedy it.

Preferable to ‘does not suit us at this time’ or the equivalent.

This little post is just to note and appreciate the useful response. I will most likely be taking them up on their ‘hope that you’ll keep us in mind in the future’, though whether they’ll appreciate that I can’t say!

 

grammerphoney

A belated open letter to Google

Found this in my list of drafts. Outdated in detail, but perhaps not in overall tenor.


https://about.google/google-in-australia/an-open-letter

August, 2020

Dear Google,

Civilisation and society are about compromise. We all agree that there are some personal freedoms we will go without so that we can all live together and benefit. I am not allowed to get free stuff by stealing it from others — and in return, others are not supposed to steal from me. We could consider that a curtailment of our freedoms. We could also consider it as a necessary condition for civilised life.

I found your letter, which I read on 17 August 2020, amusing in its hypocrisy. While I quite understand that the law may result in a curtailment of your rights to redistribute the work of others, and may well result in less-effective web searches, I think that is a compromise that businesses like yours have to be prepared to make in the interests of us all getting along. For years you have been raking through the internet for content, which you provide very efficiently to users. The efficiency of your search means that many of us never even see the original source of the material, and certainly do not feel the need to recompense the original source for their work in creating the content. But the time has come for Google to realise that its business model is essentially parasitic, and the parasite is killing the host. If there is no good content out there to search for, then Google suffers as much as anybody, and while Google and similar businesses insist on redistributing content that they have in no way contributed to producing, they are taking away the financial support that allows great content to be developed. Is Google directly funding investigative journalism? Not if it can help it.

The quality of a democracy is in large part measured by the freedom and quality of its press. But there can be no holding to account of the rich and powerful when media companies are giving away their content for free. If their content is being found through Google, and Google is making money through adverts on pages that have eyes on them because of that content, then Google ought to be paying for that content. As ought Facebook, Youtube, Twitter and any other platform. Anything else is hypocrisy.

I agree that the proposed regulations are far from perfect. I would like to see more money distributed beyond the ‘big media companies’ as you call them (big companies, yet far, far smaller than Google — another hypocrisy). I think Google, Facebook etc have never paid the real cost of doing business. If it’s time-consuming and expensive to properly allocate credit for the content you distribute then … tough. Suck it up. Just because something is inconvenient does not make it wrong, and just because something is easy does not make it right. It’s easy to distribute other people’s work on the ‘net, but much of the woolly philosophy of ‘net freedom usually turns out to be a childish tantrum that amounts to ‘I want free stuff.’

Administrative burden is a part of doing business. If you don’t want to provide responsible internet search and so on, I’m sure plenty of people and businesses will.

And I am prepared to accept less powerful web search? If the result is stronger, more incisive journalism (and I’m not saying these new regulations will really deliver that — they may just boost the bottom lines of the media companies), then yes. I would be happy to see Google engage with journalism to make sure it can stay strong. But I don’t see any evidence of that, I just see a business that has made a lot of money looking to keep making a lot of money. The internet has seen a proliferation of opinion at the expense of proper reporting. Google is part of the problem, and your open letter simply tells me you want to keep it that way.

I don’t know that these new rules, if they happen, will achieve what they ought, but I think maybe it’s time the free ride is over. How much is enough? How many billions?

As to trying to scare me with what might happen to my data, don’t make me laugh. I doubt any news organisations will be any less trustworthy than Google itself.

Oh, and given Google’s history of tax minimisation in Australia and other countries, really, don’t pretend that anything you do is for ‘us’. Australian revenue of $4.5+ billion, Australian tax of about $50 million? Don’t pretend Google makes a contribution to anything but Google.

Best wishes

 

Darren

ASUS K43U and Windows 10 — recovery and adding RAM

A Windows 7 (and I assume 8 or 8.1) computer with a valid product key sticker can be updated to Windows 10 whether you have login details or not. (So for example you can buy one secondhand and not need to be able to log into it to make it useful and windows-y.) Whether the hardware has enough grunt to give you a good experience is another thing.

Of course, if you don’t need Windows, you can install Linux easily. I wanted one Windows machine for editing work — a world in which Micro$oft Word is ubiquitous.

I have an old ASUS K43U laptop. It comes with an AMD chip (AMD APU E-350 (Dual Core) 1.6 GhZ) and 2GB of DDR3 RAM, some of which seems to be soaked up, maybe by video, I’m not sure. It is a Windows 7 era machine, which it runs/ran quite briskly, but the login details are long missing.  But it has got the product key sticker on the bottom, and you can still get Win 10 Home for free if you have a sticker for Win 7, so I did the thing where you download Windows 10 installation media. You write it to a USB using a working Windows machine, boot from the USB and away you go. It works pretty well and you get a nice shiny Windows installation. The instructions on the Windows website make it pretty simple. Just make sure your USB stick has enough capacity.

Of course, the first thing you have to do is uninstall a whole lot of cruft. Games, Xbox-related garbage, all that sort of thing. Then update it and remove any cruft it has (re)installed (or update first, I guess). Then of course you find out that 2GB DDR3 RAM and an oldish chip makes for a very sluggish experience. Now, all I want from this machine is to be able to do some editing work on the go. I do most editing at work, and when I work from home I have a desktop, but I did not have a Windows laptop, and this will fill that gap. I don’t need great performance. But more RAM is always welcome.

Inside the machine, opened it up and look at the single stick of RAM:

Hynix 2GB 1Rx8 PC3-10600S-9-10-B1

Went to ebay and matched as many fields as possible (could have gone for more than 2GB, I guess):

  • 2GB — check
  • 1Rx8 — check
  • PCS-10600S — check
  • -9-10-B1 — check (well, almost; -9-10-B2)

OK, take the plunge and spend my $10. Wait for post. Turn off machine. Clip the stick of RAM into the empty slot. There, done. Turn it on and bring up the system information; it tells me I have 4BG RAM, 3.6GB usable. OK.

It is still a little sluggish to start programs (big ones, anyway), but quite responsive once they are loaded, and much better at having a couple of things open at once.

Good quality screen, nice keyboard and a sensible arrangement of keys and suchlike, it makes for a very useful mobile editing tool. 

Editing tool

 

Command line printing from Cygwin

If you like punting off print jobs from your Linux command line, what can you do in Cygwin?

It depends strongly on the printer. Cygwin provides the lpr command, but it just queues a raw print job, so you have to make sure your printer can interpret it. If not, you get those lovely endless pages with one or two PostScript commands on each (say) if you try to print a ps or eps file.

I am connected to a PCL printer on a server; not a direct connection.

Install lpr from cygutils-extra.

If the printer has a server name, give it to lpr:

$ lpr -d "//servername/FUJI XEROX DocuCentre-VII C2273" file-to-print.extn

But data are sent ‘raw’ so don’t send (eg) PostScript unless it is a PostScript printer!

My printer uses PCL, so how can I print PDF or PS to it?

Use GhostScript to convert:

$ gs -dBATCH -dNOPAUSE -dAutoRotatPages=/None -sDEVICE=ljet4d -sOutputFile=bad-para.pcl -f bad-para.pdf

Then print; nope.

$ gs -dBATCH -dNOPAUSE -dAutoRotatPages=/None -sDEVICE=laserjet -sOutputFile=bad-para.pcl -f bad-para.pdf

Yep, the basic old ‘laserjet’ worked. So the issue here is really what the printer can understand. The method works fine if the gs device is matched to the printer.

So, taking a file from xFig, I convert to PostScript then to PCL then send the job. Note that LaserJet is 300 dpi and black and white — rather crude.

$ fig2dev -L ps -P -z A4 peer-review-chart.fig > peer-review-chart.ps
$ gs -dBATCH -dNOPAUSE -dAutoRotatPages=/None -sDEVICE=laserjet -sOutputFile=peer-review-chart.pcl -f peer-review-chart.ps
$ lpr -d "//servername/FUJI XEROX DocuCentre-VII C2273" peer-review-chart.pcl

This works. Some experimentation may find a more capable yet still compatible device — depends on local factors.

PRINT!

tomorrow, we will make jam

anotherkatewilson

How do you preserve a moment?
How do you save
the scent of horse and summer hay,
the birdsong and cicada buzz
the green of leaves against blue sky,
a hidden bird’s nest
a child climbing for golden fruit
with a sweet, wild taste
and a smile and a wave from a passer-by
as we walk hand in hand along the road,
our hats full of plums…

How do you put an afternoon in a jar,
so you can hold it in your hand,
see its glow,
and taste its sweetness again?

Tomorrow, we will make jam.

View original post

TeXLive but not so big

Default TeXLive is well above a GB of stuff, and a very full install is above 4 GB. That’s a lot! It also means a lot of packages to update, a lot of data allowance to use. Now, I don’t want to go too far the other way, and I don’t want to spend ages sorting this out, so:

Can I install a medium-sized system that will be highly usable but not so enormous? Can I do it without rolling my sleeves up? (The answer is of course ‘yes’.)

It’s more a question of wanting to contain the size of the updates — there’s no lack of disk space on modern machines.

For context, MS Office Pro 2010 (Word, Excel, PPT, all the other tools I don’t use etc) comes out at about 800 MB. LibreOffice specifies ‘up to 1.5 GB’, which is also rather a lot.

Step 1 — got the netinstaller

https://www.tug.org/texlive/acquire-netinstall.html

and for windows

http://mirror.ctan.org/systems/texlive/tlnet/install-tl-windows.exe

Step 2 — ran it (not as admin) and clicked Advanced

Under Selections, clicked the Scheme: Change button. Chose basic scheme (plain and latex)

(Can use Customize to be more fine-grained — add in a few things you know you want, esp. localisations, but I did not.)

Said it wants about 400 MB.

Go!

See end of post for a list of packages it installed.

Then it said:

See C:/texlive/2020/index.html for links to documentation.
The TeX Live web site (https://tug.org/texlive/) contains any updates and corrections.
TeX Live is a joint project of the TeX user groups around the world; please consider
supporting it by joining the group best for you. The list of groups is available on
the web at https://tug.org/usergroups.html.

Step 3 — a test

Opened a CMD.EXE window and checked that the path now included the tex binaries:

C:\>path
PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\texlive\2020\bin\win32

OK, so … copy the sample document into some working directory and try it out:

C:\>cd \Users\username\Documents
C:\Users\username\Documents>copy \texlive\2020\texmf-dist\tex\latex\base\sample2e.tex
C:\Users\username\Documents>latex sample2e
This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live 2020/W32TeX) (preloaded format=latex)
restricted \write18 enabled.
entering extended mode
(./sample2e.tex
LaTeX2e patch level 5
L3 programming layer
(c:/texlive/2020/texmf-dist/tex/latex/base/article.cls
Document Class: article 2019/12/20 v1.4l Standard LaTeX document class
(c:/texlive/2020/texmf-dist/tex/latex/base/size10.clo))
(c:/texlive/2020/texmf-dist/tex/latex/l3backend/l3backend-dvips.def)
No file sample2e.aux.
(c:/texlive/2020/texmf-dist/tex/latex/base/omscmr.fd) [1] [2] [3]
(./sample2e.aux) )
Output written on sample2e.dvi (3 pages, 7568 bytes).
Transcript written on sample2e.log.

View the DVI file:

C:\Users\username\Documents>dviout sample2e

Make a PostScript file:

C:\Users\username\Documents>dvips sample2e
This is dvips(k) 2020.1 Copyright 2020 Radical Eye Software (www.radicaleye.com)
' TeX output 2020.09.01:0934' -> sample2e.ps
<c:/Users/username/.texlive2020/texmf-var/fonts/pk/ljfour/jknappen/ec/tcrm1000.600
pk>.[1][2][3]

View the PostScript file:

C:\Users\username\Documents>psviewer sample2e.ps

(Opens it in Acrobat Reader, which is already installed on this machine; I don’t know what happens if it’s not installed.)

Or make a PDF the modern way:

C:\Users\username\Documents>pdflatex sample2e
This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live 2020/W32TeX) (preloaded format=pdflatex)
restricted \write18 enabled.
entering extended mode
(./sample2e.tex
LaTeX2e patch level 5
L3 programming layer
(c:/texlive/2020/texmf-dist/tex/latex/base/article.cls
Document Class: article 2019/12/20 v1.4l Standard LaTeX document class
(c:/texlive/2020/texmf-dist/tex/latex/base/size10.clo))
(c:/texlive/2020/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def)
(./sample2e.aux) (c:/texlive/2020/texmf-dist/tex/latex/base/omscmr.fd) [1{c:/te
xlive/2020/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] [2] [3]
(./sample2e.aux) ) <c:/Users/username/.texlive2020/texmf-var/fonts/pk/ljfour/jkna
ppen/ec/tcrm1000.600pk><c:/texlive/2020/texmf-dist/fonts/type1/public/amsfonts/
cm/cmbx12.pfb><c:/texlive/2020/texmf-dist/fonts/type1/public/amsfonts/cm/cmex10
.pfb><c:/
texlive/2020/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi7.pfb><c:/texlive/20
20/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb><c:/texlive/2020/texmf-d
ist/fonts/type1/public/amsfonts/cm/cmr12.pfb><c:/texlive/2020/texmf-dist/fonts/
type1/public/amsfonts/cm/cmr17.pfb><c:/texlive/2020/texmf-dist/fonts/type1/publ
ic/amsfonts/cm/cmr6.pfb><c:/texlive/2020/texmf-dist/fonts/type1/public/amsfonts
/cm/cmr7.pfb><c:/texlive/2020/texmf-dist/fonts/type1/public/amsfonts/cm/cmr8.pf
b><c:/tex
live/2020/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy7.pfb><c:/texlive/2020/
texmf-dist/fonts/type1/public/amsfonts/cm/cmti10.pfb>
Output written on sample2e.pdf (3 pages, 137016 bytes).
Transcript written on sample2e.log.

View the PDF

C:\Users\username\Documents>psviewer sample2e.pdf

OK.

Step 4 — modifying and updating the installation

C:\Users\username\Documents>tlmgr --help | more

(screens and screen of output — key things are…)

C:\Users\username\Documents>tlmgr --gui
Please use tlshell as a GUI for tlmgr
C:\Users\username\Documents>tlshell

(Which works)

The command line tlmgr or the GUI can be used to search for and install missing packages, to update the installation and so on.

Step 5 — how big on disk?

As regards the size on disk of the texlive tree Windows properties says

Size: 389 MiB
Size on disk: 413 MiB

So, it is big, but not incredibly enormous, although of course it will only get bigger as functionality is added.

jkghbgegftc


The packages:

Installing to: C:/texlive/2020
Installing [001/131, time/total: ??:??/??:??]: texlive.infra [421k]
Installing [002/131, time/total: 00:03/17:17]: texlive.infra.win32 [2667k]
Installing [003/131, time/total: 00:05/03:55]: tlperl.win32 [6816k]
Installing [004/131, time/total: 00:22/05:23]: ae [84k]
Installing [005/131, time/total: 00:24/05:49]: amscls [1437k]
Installing [006/131, time/total: 00:27/05:44]: amsfonts [4725k]
Installing [007/131, time/total: 00:39/05:51]: amsmath [2401k]
Installing [008/131, time/total: 00:43/05:37]: atbegshi [409k]
Installing [009/131, time/total: 00:45/05:45]: atveryend [380k]
Installing [010/131, time/total: 00:47/05:53]: auxhook [286k]
Installing [011/131, time/total: 00:49/06:03]: babel [1580k]And these tools will allow pacakges to be added as needed.
Installing [012/131, time/total: 00:58/06:38]: babel-english [137k]
Installing [013/131, time/total: 01:00/06:49]: babelbib [1168k]
Installing [014/131, time/total: 01:03/06:47]: bibtex [404k]
Installing [015/131, time/total: 01:04/06:46]: bibtex.win32 [41k]
Installing [016/131, time/total: 01:04/06:45]: bigintcalc [467k]
Installing [017/131, time/total: 01:06/06:50]: bitset [622k]
Installing [018/131, time/total: 01:08/06:51]: bookmark [481k]
Installing [019/131, time/total: 01:11/07:01]: carlisle [85k]
Installing [020/131, time/total: 01:13/07:11]: cm [235k]
Installing [021/131, time/total: 01:15/07:19]: collection-basic [1k]
Installing [022/131, time/total: 01:16/07:25]: collection-latex [1k]
Installing [023/131, time/total: 01:16/07:25]: collection-wintools [1k]
Installing [024/131, time/total: 01:17/07:31]: colorprofiles [113k]
Installing [025/131, time/total: 01:18/07:35]: colortbl [593k]
Installing [026/131, time/total: 01:19/07:30]: dehyph [46k]
Installing [027/131, time/total: 01:21/07:40]: dviout.win32 [2183k]
Installing [028/131, time/total: 01:25/07:25]: dvipdfmx [3080k]
Installing [029/131, time/total: 01:27/06:50]: dvipdfmx.win32 [315k]
Installing [030/131, time/total: 01:28/06:51]: dvips [566k]
Installing [031/131, time/total: 01:30/06:52]: dvips.win32 [92k]
Installing [032/131, time/total: 01:31/06:56]: ec [280k]
Installing [033/131, time/total: 01:39/07:28]: enctex [272k]
Installing [034/131, time/total: 01:41/07:34]: epstopdf-pkg [362k]
Installing [035/131, time/total: 01:43/07:38]: etex [197k]And these tools will allow pacakges to be added as needed.
Installing [036/131, time/total: 01:44/07:39]: etex-pkg [7k]
Installing [037/131, time/total: 01:45/07:44]: etexcmds [302k]
Installing [038/131, time/total: 01:47/07:48]: fancyhdr [741k]
Installing [039/131, time/total: 01:49/07:46]: fix2col [217k]
Installing [040/131, time/total: 01:50/07:48]: geometry [900k]
Installing [041/131, time/total: 01:53/07:48]: gettitlestring [320k]
Installing [042/131, time/total: 01:54/07:48]: glyphlist [25k]
Installing [043/131, time/total: 01:54/07:48]: graphics [2007k]
Installing [044/131, time/total: 01:58/07:38]: graphics-cfg [2k]
Installing [045/131, time/total: 01:58/07:38]: graphics-def [13k]
Installing [046/131, time/total: 01:59/07:42]: grfext [310k]
Installing [047/131, time/total: 02:01/07:46]: grffile [357k]
Installing [048/131, time/total: 02:03/07:49]: hopatch [305k]
Installing [049/131, time/total: 02:04/07:49]: hycolor [380k]
Installing [050/131, time/total: 02:05/07:48]: hyperref [3766k]
Installing [051/131, time/total: 02:09/07:21]: hyph-utf8 [312k]
Installing [052/131, time/total: 02:12/07:28]: hyphen-base [22k]
Installing [053/131, time/total: 02:13/07:31]: hyphenex [187k]
Installing [054/131, time/total: 02:14/07:32]: ifplatform [156k]
Installing [055/131, time/total: 02:16/07:37]: iftex [217k]
Installing [056/131, time/total: 02:17/07:38]: infwarerr [287k]
Installing [057/131, time/total: 02:19/07:42]: intcalc [431k]
Installing [058/131, time/total: 02:20/07:41]: knuth-lib [30k]
Installing [059/131, time/total: 02:21/07:44]: knuth-local [23k]
Installing [060/131, time/total: 02:22/07:47]: kpathsea [1074k]
Installing [061/131, time/total: 02:24/07:42]: kpathsea.win32 [476k]
Installing [062/131, time/total: 02:25/07:41]: kvdefinekeys [297k]
Installing [063/131, time/total: 02:26/07:41]: kvoptions [496k]
Installing [064/131, time/total: 02:28/07:42]: kvsetkeys [378k]
Installing [065/131, time/total: 02:30/07:45]: l3backend [39k]
Installing [066/131, time/total: 02:31/07:47]: l3kernel [10455k]
Installing [067/131, time/total: 02:38/06:40]: l3packages [1825k]
Installing [068/131, time/total: 02:40/06:32]: latex [17858k]
Installing [069/131, time/total: 02:52/05:24]: latex-bin [69k]
Installing [070/131, time/total: 02:52/05:24]: latex-bin.win32 [1k]
Installing [071/131, time/total: 02:53/05:26]: latex-fonts [19k]
Installing [072/131, time/total: 02:54/05:28]: latexconfig [4k]
Installing [073/131, time/total: 02:55/05:29]: letltxmacro [292k]
Installing [074/131, time/total: 02:56/05:30]: lm [17956k]
Installing [075/131, time/total: 03:17/05:00]: ltxcmds [397k]
Installing [076/131, time/total: 03:19/05:02]: ltxmisc [16k]
Installing [077/131, time/total: 03:20/05:03]: lua-alt-getopt [6k]
Installing [078/131, time/total: 03:22/05:06]: luahbtex [30k]
Installing [079/131, time/total: 03:23/05:08]: luahbtex.win32 [1517k]
Installing [080/131, time/total: 03:24/05:04]: lualibs [213k]
Installing [081/131, time/total: 03:26/05:07]: luaotfload [1136k]
Installing [082/131, time/total: 03:32/05:12]: luaotfload.win32 [1k]
Installing [083/131, time/total: 03:33/05:13]: luatex [1867k]
Installing [084/131, time/total: 03:35/05:10]: luatex.win32 [1777k]
Installing [085/131, time/total: 03:37/05:08]: makeindex [460k]
Installing [086/131, time/total: 03:38/05:08]: makeindex.win32 [18k]
Installing [087/131, time/total: 03:39/05:09]: metafont [80k]
Installing [088/131, time/total: 03:39/05:09]: metafont.win32 [142k]
Installing [089/131, time/total: 03:40/05:10]: mflogo [242k]
Installing [090/131, time/total: 03:45/05:16]: mfnfss [458k]
Installing [091/131, time/total: 03:48/05:19]: mfware [102k]
Installing [092/131, time/total: 03:52/05:24]: mfware.win32 [58k]
Installing [093/131, time/total: 03:52/05:24]: modes [294k]
Installing [094/131, time/total: 03:54/05:26]: mptopdf [51k]
Installing [095/131, time/total: 03:55/05:27]: mptopdf.win32 [1k]
Installing [096/131, time/total: 03:55/05:27]: natbib [493k]
Installing [097/131, time/total: 03:57/05:29]: oberdiek [9106k]
Installing [098/131, time/total: 04:04/05:11]: pagesel [334k]
Installing [099/131, time/total: 04:05/05:12]: pdfescape [347k]
Installing [100/131, time/total: 04:07/05:13]: pdftex [1610k]
Installing [101/131, time/total: 04:10/05:13]: pdftex.win32 [693k]
Installing [102/131, time/total: 04:10/05:11]: pdftexcmds [391k]
Installing [103/131, time/total: 04:12/05:12]: plain [70k]
Installing [104/131, time/total: 04:13/05:13]: pslatex [7k]
Installing [105/131, time/total: 04:13/05:13]: psnfss [275k]
Installing [106/131, time/total: 04:16/05:16]: pspicture [50k]
Installing [107/131, time/total: 04:17/05:17]: refcount [329k]
Installing [108/131, time/total: 04:19/05:19]: rerunfilecheck [317k]
Installing [109/131, time/total: 04:20/05:19]: stringenc [702k]
Installing [110/131, time/total: 04:22/05:20]: symbol [36k]
Installing [111/131, time/total: 04:22/05:20]: tex [77k]
Installing [112/131, time/total: 04:23/05:21]: tex-ini-files [5k]
Installing [113/131, time/total: 04:24/05:22]: tex.win32 [130k]
Installing [114/131, time/total: 04:25/05:23]: texlive-common [502k]
Installing [115/131, time/total: 04:26/05:23]: texlive-docindex [165k]
Installing [116/131, time/total: 04:27/05:24]: texlive-en [1848k]
Installing [117/131, time/total: 04:29/05:21]: texlive-msg-translations [138k]
Installing [118/131, time/total: 04:30/05:22]: texlive-scripts [343k]
Installing [119/131, time/total: 04:32/05:23]: texlive-scripts.win32 [36k]
Installing [120/131, time/total: 04:33/05:24]: tlgs.win32 [6677k]
Installing [121/131, time/total: 04:41/05:17]: tlpsv.win32 [1411k]
Installing [122/131, time/total: 04:42/05:14]: tlshell [27k]
Installing [123/131, time/total: 04:43/05:15]: tlshell.win32 [2599k]
Installing [124/131, time/total: 04:56/05:23]: tools [5355k]
Installing [125/131, time/total: 05:01/05:16]: unicode-data [289k]
Installing [126/131, time/total: 05:02/05:17]: uniquecounter [292k]
Installing [127/131, time/total: 05:04/05:18]: updmap-map [304k]
Installing [128/131, time/total: 05:05/05:18]: url [266k]
Installing [129/131, time/total: 05:07/05:20]: wintools.win32 [5825k]
Installing [130/131, time/total: 05:14/05:14]: xdvi [175k]
Installing [131/131, time/total: 05:15/05:15]: zapfding [46k]

SSH from FreeDOS

I found some really clear and authoritative instructions on getting this to work at https://justinmiller.io/posts/2020/07/15/legacy-dos-ssh-keys/ So I thought I would give it a try.

(1) (As superuser) edited the /etc/ssh/sshd_config file on a Debian 10 box. Added these lines to the end:

##############################
# For SSH2DOS
# https://justinmiller.io/posts/2020/07/15/legacy-dos-ssh-keys/
#############################
Ciphers +aes128-cbc
KexAlgorithms +diffie-hellman-group1-sha1
HostKeyAlgorithms +ssh-dss
HostKey /etc/ssh/ssh_host_dsa_key

# Uncomment these to prevent DSA only
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key

(2) Saved it and created the requited DSA key:

# ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key

(3) Restarted the sshd daemon. Debian 10 uses systemd, so:

f# systemctl restart ssh.service

(4) Then tried to log in from the FreeDOS machine.

C:\> ssh2d386 -g username server

And it works.

scp from the same suite (scp2d386.exe) also works. The same issue is not a problem with the ftp program because it uses a different protocol.

When I tried to log in using the key instead of password, the combination of jemmex (the memory manager FreeDOS runs) and ssh2d386.exe did not play nicely. There may be a combination of options that would allow the -i switch to ssh2d386.exe to work (eg use a different memory manager, or ssh2dos.exe instead of the 386 version), but I have not explored them all.

Conclusion

Thanks https://justinmiller.io!

SSH2DOS can be used as long as you can mess with the server config. So it is of limited use for getting into machines you don’t administer — you’d have to set up an intermediary, I guess. But it’ still pretty handy. I think I’d struggle to update the code to use a more modern key exchange algorithm.


PS: Available key exchange protocols are (run on the server):

$ ssh -Q kex
diffie-hellman-group1-sha1
diffie-hellman-group14-sha1
diffie-hellman-group14-sha256
diffie-hellman-group16-sha512
diffie-hellman-group18-sha512
diffie-hellman-group-exchange-sha1
diffie-hellman-group-exchange-sha256
ecdh-sha2-nistp256
ecdh-sha2-nistp384
ecdh-sha2-nistp521
curve25519-sha256
curve25519-sha256@libssh.org

Voila!