diff options
Diffstat (limited to 'content')
35 files changed, 2579 insertions, 76 deletions
diff --git a/content/_index.md b/content/_index.md index da5657c..2d1a90e 100644 --- a/content/_index.md +++ b/content/_index.md @@ -2,6 +2,11 @@ title = "Andreas Baumann's Personal Home Page" +++ +You reached my personal web page and blog. I post on technologies, projects +and ideas currently on my mind. + +## Technical Technicalities + Using a static HTML generator now called [Hugo](https://gohugo.io/). Before I used HTML and server-side-includes. Synchronization is done with rsync over ssh. @@ -10,7 +15,8 @@ the two wikis/CMS I had before (I don't mention names) were hacked in no time. And don't want to spend any time doing security updates all the time. -Hosting is done on a Raspberry Pi 1 B+ with [ArchARM](https://archlinuxarm.org/). +Hosting is done on a Raspberry Pi 1 B+ (as of 20th of July 2019 it has +been upgraded to a Raspberry Pi 2 Model B) with [ArchARM](https://archlinuxarm.org/). I was simply fed up with the speed and the cumbersome user interface of nowadays virtualized web hosting solutions (I don't mention names here again). @@ -22,3 +28,5 @@ my personal domain. ![Alix and Raspberry Pi for hosting](images/alix_rpi.jpg "Alix and Raspberry Pi for hosting") ..and yes, the table is dirty.. :-) + +## Blog articles diff --git a/content/blog/archlinux-macbook-a1211.md b/content/blog/archlinux-macbook-a1211.md new file mode 100644 index 0000000..f0c5ec7 --- /dev/null +++ b/content/blog/archlinux-macbook-a1211.md @@ -0,0 +1,373 @@ ++++ +title = "Archlinux on a MacBook Pro 15'' Model A1211" +categories = [ "Operating System", "Archlinux", "MacBook" ] +date = "2018-11-12T16:55:39+01:00" +thumbnail = "/images/blog/archlinux-macbook-a1211/macbook-A1211.jpg" ++++ + +## History + +I got an old Mac from a collegue at work. Apple decided not to +support those devices anymore, anyway, they date back to 2006. +I think, it's a pitty, because this Mac has a solid case, a pretty fast +64-bit processor (sorry Archlinux32, no test machine for you) and +a graphic chip which is not melting away like in later models +(I don't name brand names here).. + +Here the specifications: + +* 2.3 GHz Intel Core 2 Duo +* 2GB 667 DDR2 SDRAM +* OSX 10.6.8 +* ATI Radeon X1600 256 MB RAM, 1440x900, 32 bit + +I didn't try any Sierra OS X hacks (or installing a Capitan, rumours are, +it works even on such an old laptop) on old hardware and besides, +Archlinux is a better choice for a developer on a Mac. Although +there are still MacPorts for OS X 10.6.x (no Brew though), it can be +quite painful to get something compiled on a Mac OS that old. + +As we will see later, we want to keep OS X around to be able to +change some settings, extract some firmware, etc. + +## Installation + +### Prepare for dual installation + +We have a whooping 120 GB hard disk space, so I shrank the OS X partition to 64 GB. +This can be done in the *Disk Utility.app*, just leave EFI in peace, set OSX to +64 GB and assign the rest of the hard disk as free space. + +Prepare the USB stick for installation, I had no luck with the standard ISO, +but a hand-crafted USB-stick worked: + +``` +hdiutil convert -format UDRW -o archlinux-2018.09.01-x86_64.img archlinux-2018.09.01-x86_64.iso +dd if=archlinux-2018.09.01-x86_64.dmg of=/dev/disk2 bs=1m +``` + +### EFI boot + +I used [ReFIT for MAC](http://refit.sourceforge.net/) to improve the +somewhat limited EFI environment of an early Mac (don't get me wrong, it's +pretty impressive that such an old machine already had EFI, but nowadays this +EFI shows its age). + +The firmware is a 32-bit EFI without a proper command line mode, +causing trouble all along. I didn't take ReFind as I didn't expect the +32-bit EFI to be currently supported, especially as I see Tianocore +failing to build with more modern 32-bit binutils and gcc. + +I installed a 32-bit GRUB onto the EFI partition as a second boot option +along to OSX. This one then boots ArchLinux. This is easier than trying +to load a 64-bit kernel with kernel EFI stub support from an 32-bit +EFI environemnt with systemd-boot. + +### ATI VESA BIOS + +I didn't want to boot into legacy mode to make the VGA BIOS visible, so +I got a nice problem during KMS switching during early boot: the +graphical output just froze. The irony here is that modern Linux and Xorg +don't care at all about the old VGA/VESA BIOS, but they do so for KMS, +where the kernel has to rely on 16-bit firmware functions in the video +BIOS to program the video chip for graphics mode. + +All I got was the following kernel and Xorg error messages: + +``` +[2.052705] [drm] initializing kernel modesetting (RV530 0x1002:0x71C5 0x106B:0x0080 0x00). +[2.052742] radeon 0000:01:00.0: Invalid PCI ROM header signature: expecting 0xaa55, got 0xa1a1 +[2.052817] [drm:radeon_get_bios [radeon]] *ERROR* Unable to locate a BIOS ROM +[2.052825] radeon 0000:01:00.0: Fatal error during GPU init +[2.053037] radeon: probe of 0000:01:00.0 failed with error -22 +... +[31.041] (EE) open /dev/dri/card0: No such file or directory +``` + +So this basically translates to: "I don't have a direct rendering interface, +because there is no video card, because there is no BIOS for that card". + +The key idea was to extract the VESA BIOS on a distribution which handles +the KMS switching correctly (in my case an old Ubuntu 10). + +``` +dd if=/dev/mem of=vbios.bin bs=65536 skip=12 count=1 +``` + +Verify that you actually got the right firmware. There is an error message +when booting the kernel saying: + +``` +[2.052742] radeon 0000:01:00.0: Invalid PCI ROM header signature: expecting 0xaa55, got 0xa1a1 +``` + +so we expect to find that signature at the beginning of the *vbios.bin* file: + +``` +hexdump -C vbios.bin | head -n 1 +00000000 55 aa 7d e9 7f 02 00 00 00 00 00 00 00 00 00 00 |U.}.............| +``` + +This firmware comes into */lib/firmware/radeon/vbios.bin* to be available during +boot. + +The next problem was that the radeon module in the Linux kernel doesn't +know about this firmware. There is a patch in https://bugs.freedesktop.org/show_bug.cgi?id=26891 +for older kernels, but it translates easily to the latest kernel. All +it does is to load the *vbios.bin* file from the right place, when all the other +options fail. + +My version of the module is [here](/text/blog/archlinux-macbook-a1211/radeon_bios.c), check +out function *radeon_read_bios_from_firmware* and the code calling that function. + + +In order to use the Radeon driver for KMS as early as possible, +I put it into the init-RAM-disk: + +So, I added to */etc/mkinitcpio.conf* and rebuilt the ram disks: + +``` +MODULES=(radeon) +FILES=(/usr/lib/firmware/radeon/vbios.bin) +``` + +### "Total Darkness" after 10 minutes + +Everything was running smoothly.. for about 10 minutes. Then my LCD display +just went pitch black. + +Setting the brightness manually didn't help: + +``` +xrandr --output LVDS --brightness 1 +``` + +(it did work later though to set the brightness between 0.0 and 1.0) + +The trick is to tell the radeon module to handle the LCD backlight, not +one of the Apple brightness modules. In */etc/modprobe.d/radeon.conf* put: + +``` +options radeon backlight=1 +``` + +Also handy is the https://aur.archlinux.org/packages/brightd/, though +I think also systemd-backlight can nowadays at least save the brightness +across reboots and suspends. + +### Function keys or special keys + +If you don't need the special keys for controlling the volume and brightness but instead the old +Fxx function keys, add the following to */etc/modprobe.d/hid_apple.conf*: + +``` +options hid_apple fnmode=2 +``` + +### Camera + +Here we come to iSight and why we need OS X around to extract the proper +firmware. + +https://wiki.archlinux.org/index.php/Mac#Webcam has a really nice walkthrough. + +Shortly, you need https://aur.archlinux.org/packages/hfsprogs/ to mount the HFS +partition. There you will find a file called *AppleUSBVideoSupport* in +*/System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/AppleUSBVideoSupport.kext/Contents/MacOS*. + +You will also need https://aur.archlinux.org/packages/isight-firmware-tools/. +It contains tools to extract the file containg the firmware called *isight.fw* +from *AppleUSBVideoSupport*. + +Finally it contains an udev rule in */etc/udev/rules.d/isight.rules* which then makes +sure the firmware is also loaded on startup during detection of the camera via udev. + +### Wifi + +The wireless card was supported without any problems. Just some channels +were not visible. + +Install *wireless-regdb* and make sure to enable the proper regulatory domain in +*/etc/conf.d/wireless-regdom*: + +``` +WIRELESS_REGDOM="CH" +``` + +The regulatory domain has to be set properly, put it into */etc/modprobe.d/regdom.conf*: + +``` +options cfg80211 ieee80211_regdom=CH +``` + +(CH is for Switzerland, pick your own country here) + +Note: I think my method is deprecated and you can also specify the +regulatory domain directly in wpa_supplicant.conf, but then how +to use systemd-networkd with that? + +### Fans and sensors + +[macfanctl](https://aur.archlinux.org/packages/macfanctld/) from the AUR works nicely, +also lm_sensors had no problems to get the sensor data. + +### Power consumption + +cpupower seems to work fine. Just make sure the 'p4-clockmod' module is loaded +at boot. + +Note: I didn't try powertop or other tweaks. I got some worriesome ticking +noises of the hard disk after a suspend and my battery is not that powerful +anyway, so I'll run mostly on net power. + +### Mouse buttons + +Managers might like to use only one mouse button. Also keyboard fanatics may +be happy by just switching off the mousepad completly. + +The one button mouse is a disaster for people being used to Xorg copy- +paste or Oberon enthusiasts used to three mouse buttons. + +Scrolling with two fingers is nice, but per default they are enabled only for up and down. +I enabled also scrolling to the left and right. Besides, the keyboard is missing +PageUp, PageDown keys, which is a usability nightmare when you want to +scroll bigger source code files or web pages (yes, I know there is Fn-Page, +but having Ctrl, Alt, Meta and Fn all on the same spot doesn't make it +easier to find the right one). + +Side note: I'm using *Fn* for keyboard scrolling (PgUp, PgDown), *Ctrl* for Wordstar short-cuts, "Alt" for +Notion (window manager) shortcuts, and they are really _CLOSE_ together.. + +Change */etc/X11/xorg.conf.d/50-synaptics.conf* as follows to your likings: +``` +Section "InputClass" + Identifier "Touchpad Catchall" + Driver "synaptics" + MatchIsTouchpad "on" + Option "TapButton1" "0" + Option "TapButton2" "3" + Option "TapButton3" "2" + Option "VertTwoFingerScroll" "1" + Option "HorizTwoFingerScroll" "1" + Option "ClickFinger2" = 0 + Option "ClickFinger3" = 0 +EndSection +``` + +*TabButton1=1* only leads to all kind of frantic behaviour, because I +touch the touchpad by accident too often. *ClickButton* and *TapButton* +for the second and third button are just completly useless. Either no menu +appears for TapButton or a menu appears for ClickFinger, but I can no +longer do copy-pastes. + +The default modifiers Ctrl, Alt, Meta don't do anything with the mouse +or just very weird stuff, like Alt-2-fingers jumps to the beginning of +my text. + +For now, I choose TapButtons for copy-paste, as this is the function +I need most often. + +I might add some Ctrl, Meta modifiers to get 2, 3 mouse button clicks later. + +## Philosophical Outro + +In a world where companies try hard to get people into their ecosystem (controlling +what users can do with the products they bought and own, what they can repair or let repair, what kind +of operating system and software they are supposed to use), I think, it's the +duty of any tech professional to invest some time to give old hardware back some +purpose (hence I'm also working on the Archlinux32 project). Also, throwing +away barely used machines, just because a company wants to earn billions, is an +ecological disaster. Remember, companies have been invented to make money, don't +get fooled by "we are there to make the world a better place" or any other marketing bs. +As the company which should not be named is quite good at this kind of business, I +expect all major vendors to follow soon. So that's why I keep a park of old machines +around and I'm not buying new machines since 10 years (I do buy old ones from Ebay though). + +## References + +* https://everymac.com/systems/apple/macbook_pro/specs/macbook-pro-core-2-duo-2.33-15-specs.html : + specifications of the A1211 model +* [https://bugs.freedesktop.org/show_bug.cgi?id=26891](https://bugs.freedesktop.org/show_bug.cgi?id=26891): the patch to radeon.ko, + enabling loading of file as VESA bios +* [https://bbs.archlinux.org/viewtopic.php?id=139511](https://bbs.archlinux.org/viewtopic.php?id=139511): some discussions about + the VESA radeon topic in the Archlinux forum. +* https://wiki.archlinux.org/index.php/Mac#Webcam: how to make the camera work + +## Addendum 19.2.2021 + +For kernel 5.7.6 updated version [here](/text/blog/archlinux-macbook-a1211/radeon_bios-5.7.6.c) . + +Also a small walkthrough on how to update the module (in a most likely not too official way): + +``` +wget https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.7.6.tar.xz +tar xf linux-5.7.6.tar.xz +cd linux-5.7.6 +make mrproper +# use the the configuration of the new kernel! +zcat /proc/config.gz > .config +sed -i 's/.*CONFIG_LOCALVERSION=.*/CONFIG_LOCALVERSION="-arch1-1"/g' .config +sed -i 's/.*CONFIG_LOCALVERSION_AUTO.*/# CONFIG_LOCALVERSION_AUTO is not set/g' .config +make oldconfig +make scripts prepare modules_prepare +# copy radeon_bios.c to drivers/gpu/drm/radeon +make -C . M=drivers/gpu/drm/radeon +rm -f /lib/modules/5.7.6-arch1-1/kernel/drivers/gpu/drm/radeon/radeon.ko.xz +xz -c drivers/gpu/drm/radeon/radeon.ko \ + > /lib/modules/5.7.6-arch1-1/kernel/drivers/gpu/drm/radeon/radeon.ko.xz +depmod -av +mkinitcpio -P +cp /boot/initramfs-linux.img /mnt/efi/. +cp /boot/initramfs-linux-fallback.img /mnt/efi/. + +# Archlinux kernel compilation +https://wiki.archlinux.org/index.php/Kernel/Traditional_compilation#Download_the_kernel_source +# build just one module +https://yoursunny.com/t/2018/one-kernel-module/ +``` + +Where /mnt/efi is the VFAT rEFIt EFI partition which contains grub and the kernel +image and RAM disk. + +## Addendum 18.6.2023 + +For kernel 6.3.8 updated version [here](/text/blog/archlinux-macbook-a1211/radeon_bios-6.3.8.c) . + +## Addendum 22.10.2023 + +Tried a kernel 6.5.8 (still working with the 6.3.8 version of the radeon_bios patch avaiable +[here](/text/blog/archlinux-macbook-a1211/radeon_bios-6.3.8.c)). + +Here is also another way to build the kernel and the patched radeon module: + +``` +mount /mnt/efi (before updating the kernel!) +pacman -Syyu +cp /boot/vmlinuz-linux /mnt/efi/vmlinuz-linux +cp /boot/initramfs-linux.img /mnt/efi/initramfs-linux.img +cp /boot/initramfs-linux-fallback.img /mnt/efi/initramfs-linux-fallback.img + +pkgctl repo clone linux +cd linux +makepkg -do +cp ~/radeon_bios-6.3.8.c src/linux-6.5.8/drivers/gpu/drm/radeon/radeon_bios.c +makepkg -s + +cp pkg/linux/usr/lib/modules/6.5.8-arch1-1/kernel/drivers/gpu/drm/radeon/radeon.ko.zst \ + /lib/modules/6.5.8-arch1-1/kernel/drivers/gpu/drm/radeon/radeon.ko.zst +depmod -av +mkinitcpio -P +cp /boot/initramfs-linux.img /mnt/efi/initramfs-linux.img +cp /boot/initramfs-linux-fallback.img /mnt/efi/initramfs-linux-fallback.img +``` + +## Addendum 1.5.2024 + +Updated to kernel 6.6.8, using `MODULES=(amdgpu)` in `/etc/mkinitcpio.conf` +produces a working framebuffer. Atlernatively using `nomodeset` results +also in a working text output during boot and switching to graphical mode +works. Xorg just works using the RADEON driver (xf86-video-ati). The machine +got a lot more boring (from a hacker perspective). ;-) + +I found setting the backlight brightness to be the next challenge, so far no +tool I tried worked.. diff --git a/content/blog/bacula-lto4-backup.md b/content/blog/bacula-lto4-backup.md new file mode 100644 index 0000000..6a91978 --- /dev/null +++ b/content/blog/bacula-lto4-backup.md @@ -0,0 +1,253 @@ ++++ +date = "2021-08-04T12:10:05+01:00" +description = "" +title = "LTO-4 Backup with Bacula" +categories = [ "Backup", "Bacula", "Tape", "LTO-4" ] +thumbnail = "/images/blog/bacula-lto4-backup/lto4.jpg" ++++ + +## Intro + +With Archlinux32 reaching some terabytes of data to backup I needed +something "modern", like a tape. Now, big tapes like LTO-8 are close +to unaffordable, LTO-4 drives and tapes on the other hand can be +aqcuired on the cheap. They get thrown out of servers rooms at the moment. + +An LTO-4 tape can take 800 GB uncompressed data and the drive can be bought +on Ebay for 200 to 300 CHF. Media is affordable at ca. 40 CHF per tape. + +# Tape Drive + +My first drive I ordered was advertised as working, which proved to +be more the kind of drive only able to produce squealing noises and +to be really hungry for tapes (and killing them). Well, my plan was +to be under 1000 CHF for a backup solution, so I simply ordered a +second one, keeping the first one for spare parts. Both drives are a +HP Ultrium 1840. + +The second drive turned out to work just fine. But now, trying to connect, it +showed some issues. The tape drive comes in a noisy black box, which +I definitely don't want to run 24 hours a day. So I decided to remove +the drive and squeeze it (quite literaly) into a machine. + +# Tape Media + +After ordering quite the wrong tape (LTO-4 WORM, which costs more and +can be written only once, but has "smartness" built in to be tamperfree, +oh well), I got boxes and boxes of old tapes from Ricardo from somebody +desperately trying to get rid of them. Which is cool with me. The +price per tape dropped to around 20 CHF this way and I have more tapes +than I could ever have wished for. + +# Connectivity Issues + +I tried several SCSI cards to connect to the drive. The drive uses +the last generation of parallel SCSI, which is quite a nuisance to +find cards for. Either SCSI cards are server-grade (PCI-X) or they +are not fast enough. Some cards (like dedicated backup SCA host +adapters) work fine in some machines, but not in others. The SCSI +cables are prone to transmition errors, especially a 4 meter long +external SCSI cable with 320 MHz (external or internal 68-pin LVDS) +is somehow not really reliable at this high speed. + +I went with a short shielded internal SCSI cable and putting the drive +as close to the SCA host adapter as possible. This provided the best +results. + +The result looks like this: + +{{< figure src="/images/blog/bacula-lto4-backup/fitting.jpg" alt="LTO-4 drive fitting the machine" >}} + +# Manual Backups and Tools + +## tar + +Most people nowadays don't know anymore what the 't' in 'tar' stands +for - you guessed it: '***t***ape ***ar***chive'. :-) + +There are other formats but usually the "rule-of-least-surprise" applies +here, the simpler the command line parameters used and the more widespread +the format, the more likely somebody else (or even you yourself) is able +to actually read and restore the data. + +## mt + +The old magnetic tape tool is no longer available as binary package +on Archlinux, but there is an AUR package 'mt-st-git' providing the +'mt-st' binary. + +This tool you need to do basic operations on the tape like positioning, +ejecting, setting compression levels, etc. + +## Some use cases + +### Rewind and eject + +``` +mt-st -f /dev/nst0 rewoffl +``` + +### Erasing tapes + +``` +mt-st -f /dev/nst0 defcompression 0 +mt-st -f /dev/nst0 compression 0 +mt-st -f /dev/nst0 rewind +tar -cvf /dev/nst0 /dev/null +mt-st -f /dev/nst0 rewind +``` + +***Note*** + +I'm disabling compression on the tapes for several reasons: +* with compression on I'm not able to deliver enough data, resuling in shoe-shining +* the remaining size of a tape is so much more predictable +* I have enough tapes anyway. :-) + +### Append to end of data + +``` +mt-st -f /dev/nst0 eom +tar zcvf /dev/nst0 * +``` + +### Status of the drive, current position of the tape + +``` +mt-st -f /dev/nst0 status +``` + +## sg_logs + +This tool can give you all kind of internal information like +temperature, I/O errors of the drive, media information. + +The first page of information serves as sort of an index, of +what the drive can report: + +``` +shell> sg_logs /dev/nst0 -p 0 + + HP Ultrium 4-SCSI B32D +Supported log pages [0x0]: + 0x00 Supported log pages [sp] + 0x02 Write error [we] + 0x03 Read error [re] + 0x0c Sequential access device [sad] + 0x0d Temperature [temp] + 0x11 DT Device status [dtds] + 0x12 Tape alert response [tar] + 0x13 Requested recovery [rr] + 0x18 Protocol specific port [psp] + 0x2e Tape alert [ta] + 0x30 Tape usage (lto-5, 6) [tu_] + 0x31 Tape capacity (lto-5, 6) [tc_] + 0x32 Data compression (lto-5) [dc_] + 0x33 Write errors (lto-5) [we_] + 0x34 Read forward errors (lto-5) [rfe_] + 0x35 DT Device Error (lto-5, 6) [dtde_] + 0x3e Device Status (lto-5, 6) [ds_] +``` + +For instance I can get the temperature of the drive with: + +``` +shell> sg_logs /dev/nst0 -p 13 + + HP Ultrium 4-SCSI B32D +Temperature page [0xd] + Current temperature = 47 C + Reference temperature = <not available> + +``` + +This could be meshed into a nagios check script, checking the sanity +of the drive, but then I have to manually unmount the tape pool in +bacula-sd before each check. + +## socat + +socat is like netcat and more. It allows to build tunnels between +machines, so that the 'tar' command can pack files on one machine +and send them to another machine, where the tape write command is +attached to a listening socat. + +``` +# on the machine with the files to backup +tar cvf - * | socat - TCP4:<server_with_tape>:8080 +# on the machine where the tape is +socat TCP4-LISTEN:8080 - | dd of=/dev/nst0 bs=10240 status=progress +``` + +***Note*** + +If using dd I set the blocksize manually to 20*512=10240, this seems +to be the standard blocksize of 'tar' on Linux. + +## mbuffer + +Writting directly to the tape has some drawbacks as the tape drive +is very fast and you cannot deliver data fast enough over a 1GBit/s +network. So here 'mbuffer' helps to at least buffer data for some time +and then flash it in one burst to the tape drive. This avoids the +dreadful "shoe-shining" which not only drives you crazy (the sounds of it), +but also reduces the lifetime of the components (or at least of the +mechanics of the tape drive): + +``` +tar cvf - * | mbuffer -m 2G -P100% | \ + socat - TCP4:<server_with_tape>:8080 +socat TCP4-LISTEN:8080 - | mbuffer -m 2G -P100% | \ + dd of=/dev/nst0 bs=10240 status=progress +``` + +Buffering on either side is possible, not sure if having a buffer on both sides +improves anything. + +# Use Cases + +## Full Backup + +I did a full backup of everything onto 10 tapes with the +'tar/socat/mbuffer/dd' method. + +This is data which is quite stable and never changes, so I'll just keep +it on some tapes with the write protection label on. It doesn't make +much sense to put them into a bacula job, as the retention period is +basically 30 years or so - or till the tape dies. + +The index of the tape is a simple text file, noting the kind of data, +the size, the tape number, the file number (offset on tape) and the +date of the backup: + +``` +doc 946M 1 0 17.4.2021 +Attic 13G 1 1 17.4.2021 +bilder 19G 1 2 17.4.2021 +projects 29G 1 3 18.4.2021 +ARCHIVE 16G 1 5 18.4.2021 +BACKUPS 122G 1 6 18.4.2021 +... +music 154G 4 0 19.4.2021 +movies part1 547G 5 0 19.4.2021 +movies part2 785G 6 0 20.4.2021 +``` + +## Bacula + +I use bacula for the daily incremental and full backups now for tape +and offline cloud storage. + +bacula-sd just works fine and integrates with the rest of my backup system +(the master bacula-dir is still living on an old Raspberry Pi). The only +thing I was missing is to be able to copy a bacula job to two different +media, one being the remote cloud storage and the other one the tape. +Sort of a bacula 'tee' would be nice to have. + +# References + +* http://cdrtools.sourceforge.net/private/portability-of-tar-features.html: + on tar formats and compatibility +* https://copyconstruct.medium.com/socat-29453e9fc8a6: blog about socat +* https://www.commandlinefu.com/commands/view/13582/backup-to-lto-tape-with-progress-checksums-and-buffering +* https://aur.archlinux.org/packages/mt-st-git/ diff --git a/content/blog/mail-disaster.md b/content/blog/mail-disaster.md new file mode 100644 index 0000000..ab6d452 --- /dev/null +++ b/content/blog/mail-disaster.md @@ -0,0 +1,287 @@ ++++ +title = "Mail Problems" +categories = [ "Mail", "Linux", "Security" ] +date = "2019-03-29T12:58:31+01:00" +thumbnail = "/images/blog/mail-disaster/mail-disaster.png" ++++ + +## History + +It was a beautiful day. My mailserver on the Raspberry Pi B was running +without any issues for some time now. + +In the evening of March 12th I got a nice email from my external DNS +provider: + +``` +The BuddyNS janitor writing. A safety notification on your BuddyNS account: + + Your zones reached 60% of your account's traffic quota. + +Details: +* Total traffic produced this month: 181 Thousand queries. +* Current traffic quota: 0.3 Million queries/month. +``` + +Well, fine, I thought, finally somebody is checking on my web page and I +went to sleep. + +Of course this was not the case: I had a weak password in one of the accounts +of my mailserver (which allowed any legitimate Linux user to send +emails). This caused all those DNS lookups for my domain on the +BuddyNS DNS servers. + +So, my thinking went along the lines: well, some weeks ago +I replaced the SD card, because the old one was worn out, I cannot +remember whether I replaced all standard passwords. My suspicion got +confirmed when I saw the following line in the my mail log: + +``` +From: "George"<alarm@andreasbaumann.cc> +``` + +Swearing big times about my own stupidity (the default password for the +'alarm' account is - well - weak) I started cleaning up the mess. + +Checking my mail server logs I found that all attacks went via one single +IP (185.228.80.18). So just blocking the firewall was the fastest way to +fix the tousands of spam email being sent via my now defacto open mail relay. + +## Checking status + +There are various helpfull tools to check the status of your mail +server. I picked https://mxtoolbox.com/. This is what I got: + +``` + dmarc andreasbaumann.cc DNS Record not found + blacklist smtp.andreasbaumann.cc 127.0.0.2 + blacklist smtp.andreasbaumann.cc Blacklisted by JUNKEMAIL + blacklist smtp.andreasbaumann.cc Blacklisted by NIXSPAM + blacklist smtp.andreasbaumann.cc Blacklisted by TRUNCATE + blacklist smtp.andreasbaumann.cc Blacklisted by UCEPROTECTL1 + blacklist smtp.andreasbaumann.cc Blacklisted by WPBL + mx andreasbaumann.cc No DMARC Record found + mx andreasbaumann.cc DMARC Quarantine/Reject policy not enabled +``` + +I also like the results from ~~[http://zy0.de/q/83.150.2.48](http://zy0.de/q/83.150.2.48)~~: + +{{< figure src="/images/blog/mail-disaster/zy0_de.png" alt="zy0_de check resulst for 83.150.2.48" >}} + +Especially it shows you headers of SPAM mails, which are quite helpful +to detect, what went wrong: + +``` +Spam samples A small selection + + 12.03.2019 02:03 (Z) (date of processing) + +Return-Path: <alarm@andreasbaumann.cc> +X-Original-To: cindy@SPAMTRAP.INVALID +Received: from smtp.andreasbaumann.cc (smtp.andreasbaumann.cc [83.150.2.48]) + by mail.ixlab.de (Spamtrap) with ESMTP + for <cindy@SPAMTRAP.INVALID>; Tue, 12 Mar 2019 03:03:20 +0100 (CET) +Received: from User (unknown [185.228.80.18]) + by smtp.andreasbaumann.cc (Postfix) with ESMTPA id 909CD77F2A; + Tue, 12 Mar 2019 01:22:20 +0100 (CET) +Reply-To: <gg828579@gmail.com> +From: "George"<alarm@andreasbaumann.cc> +Subject: Good Day!! +Date: Mon, 11 Mar 2019 17:22:27 -0700 +MIME-Version: 1.0 +Content-Type: text/html; + charset="Windows-1251" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-MSMail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 +X-NiX-Spam-Hash2: 5994f93f698c55d5b527b1da55f31611 +X-NiX-Spam-Source-IP: 83.150.2.48 +X-NiX-Spam-MX: mail.ixlab.de +X-NiX-Spam-Listed: yes +``` + +## Blacklisting + +Mail servers can ask blacklists for bad IPs or domains and then block +incoming mails. + +Most blacklists give you a home page, where they explain, how they +manage the list. There you might also find the status of your IP or domain. + +There are basically three ways you can try to get off such a list: + +* you can fill in a form, usually describing what went wrong and how + you solved the problem. +* you have to send an email with basically the same kind of information +* you can do nothing, the delisting happens automatically + +Keep in mind, that humans read those messages, be polite and be open +about what went wrong. I never had a problem getting delisted, when +I described, what I did wrong in the past and how I will enforce better +security in the future. + +Also note: you usually don't get any email or feedback. Give people time +and they will consider the case. If they think, you deserve to send +emails again, they will delist you from the blacklist. + +Find below short descriptions of what I had to do in the individual cases. + +### JumkMailFilter + +Visited the "remove from the list" for at: + +https://ipadmin.junkemailfilter.com/remove.php + +Entered my IP and some text, why I got onto the list. + +### DNSBL + +~~[http://www.dnsbl.manitu.net/remove.php?value=83.150.2.48](http://www.dnsbl.manitu.net/remove.php?value=83.150.2.48)~~ + +I had to fill in a form and describe, what went wrong on my side and +how I fixed the problem. + +### TRUNCATE + +http://www.gbudb.com/truncate/index.jsp + +Had nothing to do here, but wait: + +``` +"Maintenance of this list is completely automated and there are no +provisions for the manual addition or removal of entries." +``` + +### UCEPROTECTL1 + +``` +"This blacklist does not offer any form of manual request to delist. +Your IP Address will either automatically expire from listing after +a given timeframe, or after time expires from the last receipt of +spam into their spamtraps from your IP Address. + +There is an express delisting for 89 CHF +``` + +For a personal domain I can wait for seven days sending out no spam. + +For a business domain I would most likely pay the 89 CHF. :-) + +### WPBL + +~~[http://www.wpbl.info/](http://www.wpbl.info/)~~ + +``` +IP addresses are automatically removed with time, after +spam stops arriving. For example, a lone spam sighting +will only get an IP listed for 7 days. You can also +remove an IP address using the Lookup facility at the +top of the page. This no-questions-asked, instant removal +facility is provided for the benefit of administrators +who feel that the record is in error or have fixed the +security problem that allowed spam to be sent through +their hosts. Access to the removal facility may be +restricted if there is any abuse of our system, including +attempts to automate removal of multiple IPs using +scripts. Removed records still remain in database backups. +``` + +Clicking on: + +http://www.wpbl.info/cgi-bin/remove.cgi + +I got: + +``` +Found IP address 83.150.2.48 in database, marking for removal. +Record removed. The published list is updated hourly, so changes may not show immediately. +``` + +### SPAMCOP + +https://www.spamcop.net/w3m?action=checkblock&ip=83.150.2.48 + +I filled in the provided form. + +### IBM DNS + +This is a nice security product called 'IBM-X-Forge-Exchange', +so I had to log in with my IBM Id. + +{{< figure src="/images/blog/mail-disaster/ibm.png" alt="entries in IBM-X-Forge-Exchange" >}} + +I also had to describe my case to get delisted. + +### Gmail + +Now this one was tricky. Google has a not-so-great postmaster tool, hard +to find forms to fill in and some confusing documentation. + +I tried here: + +https://glockapps.com/blog/remove-ip-address-gmail-blacklist/ + +https://support.google.com/mail/contact/msgdelivery + +The postmaster tools are not a big help, really, I registered nonetheless. + +I got reject till March 28th, as far as I can tell the domain reputation below +is one of the worst ones you can get and the only option is to wait some weeks +after filling in the forms: + +``` +Our system has detected that this message +is 550-5.7.1 likely suspicious due to the very low +reputation of the sending 550-5.7.1 domain +``` + +## Course of Action for a better mail service + +I made sure, I have some security standards in place, so that +at least faking the domain in the 'From:' field is not so simple: + +* [SPF](https://en.wikipedia.org/wiki/Sender_Policy_Framework): Sender Policy Framework +* [DKIM](https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail): Domain Keys Identified Mail +* [DMARC](https://en.wikipedia.org/wiki/DMARC): Domain-based Message Authentication, Reporting and Conformance + +Those things don't help against a broken account on the mail server, +as in my case, but they provide positive rating for emails being +judged in the future, and they are simple to implement. + +I also added a list of accounts/emails to the postfix configuration. +Only those accounts are allowed to send emails from the host. +Even if this means you have to generate the entry in '/etc/passwd' +and another one in that postfix list. This makes sure, +no "rogue" Linux account can be abused for sending emails, when +compromised. + +I added myself to the [DNSWL](https://www.dnswl.org) white list too. + +And of course, I deleted the 'alarm' account on the machine. :-) + +### Update 4.4.2019 + +Gmail is still blocking me (or again?). So is bluewin.ch. The mess is +not over, so I can only recommend everybody to make sure not to get +into this situation in the first place. + +Added [Fail2Ban](https://www.fail2ban.org) to filter for common Postfix +and Postfix SASL errors, like password-breach attempts via SASL. This +works like a charm. + +Added [Spamassassin](https://spamassassin.apache.org/) and +[Razor](http://razor.sourceforge.net/) to get rid of spam. + +### Update 15.4.2019 + +Gmail likes us again.. :-) + +## References + +* https://mxtoolbox.com/ +* http://zy0.de/ +* https://en.wikipedia.org/wiki/Sender_Policy_Framework +* https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail +* https://en.wikipedia.org/wiki/DMARC diff --git a/content/blog/no-github.md b/content/blog/no-github.md index 1d9d56d..f5641f1 100644 --- a/content/blog/no-github.md +++ b/content/blog/no-github.md @@ -14,3 +14,14 @@ The reasons should be obvious: Find my software on http://git.andreasbaumann.cc/cgit/. If you want to collaborate or supply a patch, you can contact me via email. + +### Update 22.2.2024 + +I started to make exceptions to the rule above: when forking and working on existing +projects which happen to be on Github already. Or when I push a read-only copy +to Github from personal repos, just to increase the visibility of the project. + + +Or if I want my code to be used in Copilot as example how to do good (or maybe bad) +coding. ;-) + diff --git a/content/blog/openbsd-firewall-and-securityrouter.org.md b/content/blog/openbsd-firewall-and-securityrouter.org.md index 178b827..b58a070 100644 --- a/content/blog/openbsd-firewall-and-securityrouter.org.md +++ b/content/blog/openbsd-firewall-and-securityrouter.org.md @@ -5,5 +5,5 @@ categories = [ "OpenBSD", "Security" ] thumbnail = "/images/blog/openbsd-firewall-and-securityrouter/openbsd-firewall-and-securityrouter.png" +++ -Found a really nice new router appliance based on OpenBSD 6.0, http://securityrouter.org. I’m still missing some features like a split-horizon DNS, so I will not abandon the script-based project http://github.com/andreasbaumann/OpenBSD-firewall just for now. +Found a really nice new router appliance based on OpenBSD 6.0, http://securityrouter.org. I’m still missing some features like a split-horizon DNS, so I will not abandon the script-based project http://git.andreasbaumann.cc/cgit/OpenBSD-firewall just for now. diff --git a/content/blog/openbsd-firewall-appliance-intro.md b/content/blog/openbsd-firewall-appliance-intro.md index c9b73d2..31a805c 100644 --- a/content/blog/openbsd-firewall-appliance-intro.md +++ b/content/blog/openbsd-firewall-appliance-intro.md @@ -203,7 +203,7 @@ I would like to test more things around the following topics: stuff it into a floppy to compact flash adapter, write the image, put it back. This is tedious. :-) -## Github +## Git The whole project can be found here: @@ -212,10 +212,4 @@ http://git.andreasbaumann.cc/cgit/OpenBSD-firewall/ Feedback welcome. :-) -## Note on Github - -There is a version on https://github.com/Eurospider/OpenBSD-firewall. This -is the original version and I don't plan to update it anymore. -Further development happens on my personal repo (as I'm basically the only -one using it anyway). diff --git a/content/blog/retro-computing-unisys.md b/content/blog/retro-computing-unisys.md index a3f39fa..28ee60d 100644 --- a/content/blog/retro-computing-unisys.md +++ b/content/blog/retro-computing-unisys.md @@ -98,14 +98,25 @@ series on Youtube by Andres Ramos. ## Future plans I want to be able to boot a modern Linux kernel and distribution on -it. Currently I'm working on a "port" of [Archlinux32](http://www.archlinux32.org) +it. Currently I'm working on a "port" of [Archlinux32](https://www.archlinux32.org) to the i486 architecture using the [crosstool-ng](https://crosstool-ng.github.io/) -toolchain (see [bootstrap32](https://github.com/archlinux32/bootstrap32)). +toolchain (see [bootstrap32](https://git.archlinux32.org/bootstrap32)). The installation process has to be something over iPXE, as a 1.44MB floppy really doesn't hold a kernel 4.15.x anymore. iPXE itself will need some patching for i486 too. +### Update 26.11.2022 + +Had to set up the machine again, either the SD card died or my Linux experiments +nuked the MBR. Found [mTCP](http://www.brutman.com/mTCP/) to be a very nice +alternative networking package, also having a FTP and HTTP server. + +Also the sentence about not being able to boot a modern Linux from floppy is wrong. +In the meantime I can boot it with the +[Archlinux32 i486 Floppy](https://git.archlinux32.org/archi486/tree/floppy), just the +NEx000 drivers in modern kernels are currently quite misbehaving somehow. + ## Videos and Links * LGR: [My Smallest 486 Desktop PC: Unisys CWD-4002](https://www.youtube.com/watch?v=ddgmzmw6_qE) @@ -135,6 +146,9 @@ patching for i486 too. * [DOS drivers for the NE2000](http://www.georgpotthast.de/sioux/packet.htm), the NE2000.EXE package driver * [Vibra 16 Soundblaster drivers on Vogons.org](http://www.vogonsdrivers.com/getfile.php?fileid=33&menustate=0) +### DOS software +* http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/net/wget/: wget for DOS + ### Windows 3.1 drivers * [Cirrus Logic GD5424](http://www.vogonsdrivers.com/index.php?catid=47) @@ -154,5 +168,5 @@ patching for i486 too. ### Other Links -* [Index of Interesting DOS programs](http://www.opus.co.tt/dave/indexall.htm) +* ~~[Index of Interesting DOS programs](http://www.opus.co.tt/dave/indexall.htm)~~ diff --git a/content/blog/retro-computing-vintage-computer-festival-zurich-2019.md b/content/blog/retro-computing-vintage-computer-festival-zurich-2019.md new file mode 100644 index 0000000..98b9f28 --- /dev/null +++ b/content/blog/retro-computing-vintage-computer-festival-zurich-2019.md @@ -0,0 +1,111 @@ ++++ +title = "Retro Computing - Vintage Computer Festival Zürich 2019" +categories = [ "Retro Computing", "Vintage Computer Festival", "VCF" ] +date = "2019-12-08T09:37:22+01:00" +thumbnail = "/images/blog/retro-computing-vintage-computer-festival-zurich-2019/retro-computing-vintage-computer-festival-zurich-2019.jpg" ++++ + +## Intro + +My first visit to an exhibition of old computers. It was held on +November 30th and December 1st in Zürich in the "Rote Fabrik". +Given my collection of not-so-old computers I wanted to see a collection +of really old computers. + +## PDP-11 + +The first thing which catched my attention was a PDP-11 emulator with +frontend also simulating a Tektronix 4010 graphical terminal. It's +running on a Raspberry-PI fully emulating a PDP-11 running BSD 2.11. +I was aware of old Unix V6 or V7 versions running on emulators, but +a BSD 2.11 with a TCP/IP-stack is so much nicer. + +The following is a real desktop PDP-11 with some emulators for things +like tapes and external devices: + +{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2019/retro-computing-vintage-computer-festival-zurich-2019-PDP-11.jpg" alt="PDP-11" >}} + +## Apple ][ + +I brought some old floppies and was astonished they were booting the +oldest Apple machines without any problems. Even the chess program +worked (one of my earliest encounters with a computer was playing +chess in the computer room back at my high school on an Apple \]\[). + +{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2019/retro-computing-vintage-computer-festival-zurich-2019-Apple-2.jpg" alt="Apple \]\[" >}} + +I was also able to run a "games disk" with a menu system I once typed +in from a book during my holidays back in school (yes, floppies where +too expensive back then and you learned BASIC as a bonus while typing). + +Obviously too excited this still worked I didn't take any photos of it, +so here is a placeholer, the original book with the program listings: + +{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2019/retro-computing-vintage-computer-festival-zurich-2019-apple-games-book.jpg" alt="Apple Game Book" >}} + +## old PCS + +While everybody else at the exhibitation was showing off their machines, +the IBM-PC guys were trying to make sure that monitors didn't explode +(one did) and building up a network, so they were constantly busy +doing something on those machines. I was able to run a Flight Simulator 4 +from Microsoft on an EGA-based machine, really nice: + +{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2019/retro-computing-vintage-computer-festival-zurich-2019-FS4.jpg" alt="Fligh Simulator 4" >}} + +## SoftVGA + +Really interesting speech on how to implement a VGA "card" on an Atmel-based +board. This catched my interest because I'm all in for minimalistic +hardware and software on an FPGA. + +## Fluxengine + +This was more out of personal interest, as I still own 100nds of Apple \]\[, +CP/M and PC-disks reaching back into the mid-80ies. My oldest two machines +(an IMC-2001 Taiwanese Apple/CPM-clone and the Olivetti M290) are not working +anymore and I can hardly find a floppy connector on the already old machines +I own. + +Fluxenine reads floppy images via a 5V FPGA on a stick, one side is an +old floppy connector, the oder side a normal USB connection. + +I brought some old floppies I could donate (in form of an image) for +future analysis. + +## What else + +SGI, a Next, IBM/360 on an FPGA, Amiga, Commodore, tons of Apple/Macintosh, +ZX Spectrum, ... + +## What not + +I personally missed some CP/M-based machines (not counting the electronic +type writer running CP/M and running games from a small tape drive, which +was interesting to see). Closest (from the outer appearance) came the +following IBM portable: + +{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2019/retro-computing-vintage-computer-festival-zurich-2019-IBM-5155.jpg" alt="IBM 5155 Portable" >}} + +Also I missed some Atari (like the ST TT series) machines (or maybe +I just didn't see them). + +## Important Lessons Learned + +Talk to everybody! Every single one is an enthusiast and has an interesting +history. If you just walk through the hall and stare at the machines, most +things will not be impressive at all. Also the talks I can recommend. + +## Links + +* general links + * [Vintage Computer Festival Zurich](http://vcfe.ch/doku.php): official Webpage with exhibitors and schedule of speeches held + * [Event Information "Rote Fabrik"](https://rotefabrik.ch/#/events/5084?utm_medium=display&utm_source=kulturzueri.ch&utm_campaign=kulturzueri#/events/5084): + event information + * [Wikipedia entry on vintage Computer Festival](https://de.wikipedia.org/wiki/Vintage_Computer_Festival): history and purpose of the event + * [Gallery 2019](https://www.skv-net.ch/mobilegallery/gallery.php?a=456) +* PDP-11/Tektronik: + * [Tek4010](https://github.com/rricharz/Tek4010) + * [BSD 2.11](https://github.com/RetroBSD/2.11BSD) +* [SoftVGA](http://neil.franklin.ch/Projects/SoftVGA/) +* [Fluxengine](http://cowlark.com/fluxengine): the FPGA-based USB-floppy reader diff --git a/content/blog/retro-computing-vintage-computer-festival-zurich-2021.md b/content/blog/retro-computing-vintage-computer-festival-zurich-2021.md new file mode 100644 index 0000000..58d7158 --- /dev/null +++ b/content/blog/retro-computing-vintage-computer-festival-zurich-2021.md @@ -0,0 +1,87 @@ ++++ + +title = "Retro Computing - Vintage Computer Festival Zürich 2021" +categories = [ "Retro Computing", "Vintage Computer Festival", "VCF" ] +date = "2021-11-29T06:43:34+01:00" +thumbnail = "/images/blog/retro-computing-vintage-computer-festival-zurich-2021/retro-computing-vintage-computer-festival-zurich-2021.jpg" ++++ + +## Intro + +First of all, quite amazing it could even happen given the pandemic +situation, thanks to all organizers and exhibitors. It was held on +November 27th/28th in Zürich in the "Rote Fabrik". + +No talks were held this year, also for obvious reasons. There were +not many people there presumably also due to the pandemic situation. + +## Tektronix 4010 + +2019 I saw a PDP-11 emulator along with an emulated Tektronix 4010 +graphical terminal. This time there was the real thing. Really impressive, +and a phenomenal keyboard. (The image below is unintentionally blured +due to the subpar photographic skills of the author): + +{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2021/retro-computing-vintage-computer-festival-zurich-2021-tektronix-4010.jpg" alt="Tektronix 4010" >}} + +## Soviet computers + +There were all kinds of Soviet computers, something we don't get to +see very often here. + +For instance the Agat computer based on a 6502: + +{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2021/retro-computing-vintage-computer-festival-zurich-2021-agat.jpg" alt="Agat" >}} + +The BK-0010-01 Soviet computer was really nice, being roughly a PDB-11 clone +with an impressive dual-head monitor setup: + +{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2021/retro-computing-vintage-computer-festival-zurich-2021-BK-0010-01.jpg" alt="BK-0010-01" >}} + +## Lilith and Ceres + +For the first time I saw the "portable" version of the Lilith and sadly +non-working versions of the Ceres 1 and 3 workstations. I did my studies +on the Ceres 3 when back at ETH Zurich from 1992 to 1997. Mr Gutknecht was +around to explain things. + +{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2021/retro-computing-vintage-computer-festival-zurich-2021-ceres3.jpg" alt="Ceres 3 Workstation" >}} + +I brought along my old school books, so that people had at least the chance +to read a little bit about the system. + +{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2021/retro-computing-vintage-computer-festival-zurich-2021-oberon-books.jpg" alt="Programming in Oberon and The Oberon System" >}} + + +## OLPC XO-1 + +I was exhibiting my OLPC XO-1 computer in a series of communication devices +from enter.ch. + +{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2021/retro-computing-vintage-computer-festival-zurich-2021-olpc-xo-1.jpg" alt="OLPC XO-1" >}} + +## Important Lessons Learned + +My machines are not old or rare enough. I should really try to get the IMC-2001 running again +doing some 6502-Apple2, Z80-CP/M stuff. Or the Olivetti with a 286 board inside or the 386.. + +## Links + +* general links + * [Vintage Computer Festival Zurich](https://vintagecomputerfestival.ch): official webpage +* PDP-11/Tektronik: + * [Tektronix 4010](https://en.wikipedia.org/wiki/Tektronix_4010) +* Soviet Computers: + * [BK-0010-01 Soviet computer](https://wiki.vcfb.de/2020/en:soviet_computers) + * [Agat](https://en.wikipedia.org/wiki/Agat_(computer)) +* OLPC XO-1 + * [OLPC XO-1](https://www.eguide.ch/en/objekt/xo-1-one-laptop-per-child/) +* Computermuseum + * [Enter.ch](https://www.enter.ch) +* Ceres/Lilith/Oberon: + * [Project Oberon 2013](http://www.projectoberon.com/): second edition, with a RISC-5 CPU done on FPGA + * https://verhoeven272.nl/fruttenboel/Oberon: all kind of information and nice links + * http://www.ethistory.ethz.ch/rueckblicke/departemente/dinfk/forschung/weitere_seiten/lilith/index_DE/popupfriendly/: + some nice screenshots of the machines + + diff --git a/content/blog/retro-computing-vintage-computer-festival-zurich-2022.md b/content/blog/retro-computing-vintage-computer-festival-zurich-2022.md new file mode 100644 index 0000000..2edbf62 --- /dev/null +++ b/content/blog/retro-computing-vintage-computer-festival-zurich-2022.md @@ -0,0 +1,100 @@ ++++ + +title = "Retro Computing - Vintage Computer Festival Zürich 2022" +categories = [ "Retro Computing", "Vintage Computer Festival", "VCF" ] +date = "2022-11-21T07:56:22+01:00" +thumbnail = "/images/blog/retro-computing-vintage-computer-festival-zurich-2022/retro-computing-vintage-computer-festival-zurich-2022-lisa-harddisk.jpg" ++++ + +## Intro + +This is the last vintage computer festival in Zürich in the "Rote Fabrik" +(which has to be restorated after a bad fire back in 2012) - at least +for now. It was held on November 19th/20th. + +It was back to what it was before the pandemic in terms of exhibits, +the amount of people attending, the talks (which where held again this year). + +It's an ever growing community of exhibitors, most of them try to +attend every year, so I'm just pointing out the new things, which +catched my attention (the others can be seen on older blog entries +of the series). + +This year we had challenges, so visitors could try their skills by +solving puzzles or programming tasks at the exhibition desks. This +is a good idea to get visitors more involved and it's not just a +museum then, where exhibitors have to say 20 times the same stuff +or people are just walking by the computers and making photos. + +I was sceptical in the beginning (basically because I don't like +puzzling), but in the end I also did one or two of the challenges: +trying to use a Lisa desktop and trying to get a message to Mastodon +from an old Unix System V. + +## Local Heroes + +Again we had the ETHZ Lilith and Ceres as local Zürich computers, but +this time also the group around Prof. Jean-Daniel Nicoud from the EPFL +Lausanne. He showed some really interesting things. + +### Teaching Electronics + +{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2022/retro-computing-vintage-computer-festival-zurich-2022-electronics-teaching.jpg" alt="Teaching Electronics" >}} + +Those blocks are basically 74xxx series logic chips in a block with +schematics on top. You use cables to connect them and form logical +blocks like for instance a small adder with carry. This is much nicer +to deal with than with breadboards and the real logic chips. + +### Smaky + +{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2022/retro-computing-vintage-computer-festival-zurich-2022-smaky-100.jpg" alt="Smaky 100" >}} + +This is a series of 8-bit computers, the first one based on Intel 8080, later on Z80. +This one is based on a 68k processor. The really nice thing is the graphical interface, +the keyboard and the mouse which feel absolutely modern. + +### Self-made computers + +On Youtube you can find a lot of people doing their own computer +projects based on 6502 and Z80 CPUs. This one is a really early example +of it (and totally without Youtube - the green one on the left with +the high voltage sign and the cards sticking out as in a toaster): + +{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2022/retro-computing-vintage-computer-festival-zurich-2022-self-made.jpg" alt="Self made computers" >}} + +## Apple Lisa + +This is a computer you usually see not running and only behind some centimeters of glas. +At the VCF you had the chance to experience the GUI (especially its speed, ahem). + +{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2022/retro-computing-vintage-computer-festival-zurich-2022-lisa-front.jpg" alt="Apple Lisa" >}} + +## CP/M + +Hidden in a corner were some really nice CP/M-based machines: + +{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2022/retro-computing-vintage-computer-festival-zurich-2022-cpm-machines.jpg" alt="CP/M machines" >}} + +## Important Lessons Learned + +My IMC-2001 is still not running and I'm currently fighting all kind of +broken stuff (keyboard circuit, power supply, broken ROM-chip). Not having +an exact twin of this machine makes it hard to repair. + +..and yes, I know how to create a document on the Apple Lisa now. ;-) + +## Links + +* general links + * [Vintage Computer Festival Zurich](https://vintagecomputerfestival.ch): official webpage +* Smaky (sadly a lot of the links are broken) + * [Smaky Mouse and Keyboard](https://www.informatiquegestion.ch/mouse-and-keyboard): close up images + * [Smaky machines](https://www.smaky.ch/chapitre.php?id=lami_4): the timeline of the Smaky computers + * [Smaky@museebolo](https://www.museebolo.ch/): where the Smakies can usually be seen outside the VCF + * [Video on Smaky](https://www.youtube.com/watch?v=5Vt01NJIy18): on Youtube, shows off various Smakies, + history, games, etc. @debConf +* videos + * [Youtube Gamo Tech25](https://youtu.be/rL4lvOuebJE) + * [Tomaniac](https://youtu.be/hIb0VxhVU2M) + * [The Phintage Collector](https://youtu.be/baWwDEKfXBA) diff --git a/content/blog/retro-computing-vintage-computer-festival-zurich-2023.md b/content/blog/retro-computing-vintage-computer-festival-zurich-2023.md new file mode 100644 index 0000000..75a2785 --- /dev/null +++ b/content/blog/retro-computing-vintage-computer-festival-zurich-2023.md @@ -0,0 +1,113 @@ ++++ + +title = "Retro Computing - Vintage Computer Festival Zürich 2023" +categories = [ "Retro Computing", "Vintage Computer Festival", "VCF" ] +date = "2023-11-12T17:32:22+02:00" +thumbnail = "/images/blog/retro-computing-vintage-computer-festival-zurich-2023/retro-computing-vintage-computer-festival-zurich-2023-scrib.jpg" ++++ + +## Intro + +This time the vintage computer festival in Zürich was held in +the "EWZ Kraftwerk Selnau". This is a former substation in the middle +of Zurich which is a museum, event hall and coworking area now. +The enterior is best described as a bunch of ship containers +aranged in a middle of a factory hall. In the middle there is a bar +now. There are corners with couches and a big room upstears which +looks like the former control room (and most likely was one). + +{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2023/retro-computing-vintage-computer-festival-zurich-2023-selnau1.jpg" alt="EWZ substation at Selnau" >}} + +As always I'm not listing all exhibitors and exhibited pieces, I'm +just pointing out new things, which catched my attention this year +(the others can be seen on older blog entries of the series). + +This year I was not in for challenges, I rather prefer talking to +people, but everybody can do what he wants. + +New this year is a full recording of all the talks, this is nice +as you don't have to decide whether you are watching the computers +in the exhibition and having discussions with the exhibitors or whether +you are watching the talks. This also good for the exhibitors themselves who +would love to be able to attend to the talks too. + +## Portables + +A full room upstears was dedicated to a bunch of portable computers +from the venerable Osborne OCC-1, Commodore SX-64, Amstrad, +various PC portables, etc. + +{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2023/retro-computing-vintage-computer-festival-zurich-2023-portables.jpg" alt="Portable computers" >}} + +### OLPCs + +It's nice to see two OLPC XO-1 next to each other, with the mesh +wlan in action. My takeaway is that it's not only the pieces of +hardware you have and want to show, it's also about the story +you tell about them and the way you present them - and where. + +{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2023/retro-computing-vintage-computer-festival-zurich-2023-olpcs.jpg" alt="Two 'One Laptop per Child' OLPC XO-1 on a bench" >}} + +### IBM PC Convertible (model 5140) + +I couldn't resist to play Planet X3 on CGA Composite on a small +surveilance monitor thingy (sorry, one photo was blurred and the +other one has now a non-syncing output signal, I promise, +take my word, it worked just fine in "full" CGA colors). + +{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2023/retro-computing-vintage-computer-festival-zurich-2023-ibm-convertible.jpg" alt="IBM PC Convertible (model 5140) with external monitor" >}} + +### Scrib + +Thankfully they was a Scrib teletype writer from the Smaky series +of computers in that room which you could actually touch without +white glowes. It was the technological equivalent of a Chinese +fingertrap to me, trying to spin my head around the way you use this +thing. Unique is the idea of using a mirror on the back to reflect the +image of the CRT (which is mounted on the back). The image is cristal +clear compared to other CRT displays of that time. + +I managed to print something, but couldn't remember the key combination +I pressed so I spent far too much time to reproduce printing. +I managed all kind of "erreurs de casettes" (behind the little +shiny glas cover on the right the machine can hold two small tapes) +but sadly not a second print. + +{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2023/retro-computing-vintage-computer-festival-zurich-2023-scrib.jpg" alt="Smaky Scrib" >}} + +## BBC Acorn Econet school network + +It was real joy to see the UKs pride of computing in a series of Acorn +machines joined in a Econet network. Of course various Raspberry PIs +were serving as coprocessor emulators, network files servers, etc. + +It was really pleasant to talk to Mark Usher and his plans collecting and +documenting those machines. + +Who has the time should see BCC early education series on computing on TV. + +{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2023/retro-computing-vintage-computer-festival-zurich-2023-acorns.jpg" alt="Acorns" >}} + +## Other nice projects + +Especially nice was the Fusix on a Dragon32 (something I can also imagine +to try on my IMC-2001) and the fully restaurated Sol-20 with wooden borders. + +{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2023/retro-computing-vintage-computer-festival-zurich-2023-others.jpg" alt="Dragon 32 and Sol-20" >}} + +## Important Lessons Learned + +Fix that darn IMC-2001.. ;-) + +## Links + +* general links + * [Vintage Computer Festival Zurich](https://vintagecomputerfestival.ch): official webpage +* smaky + * [Smaky Scribd](https://www.smaky.ch/chapitre.php?id=lami_6) +* Acorn, Econet + * [Listing of computer models](https://www.retro-kit.co.uk/page.cfm/content/Acorn-Computers-Ltd/index.html) + * [Econet manuals](http://www.8bs.com/othrdnld/manuals/econet.shtml) +* videos + * [Youtube video on the IBM PC Convertible (model 5140)](https://www.youtube.com/watch?v=F4fH6iPMxGw) + diff --git a/content/blog/web-search-homepage.md b/content/blog/web-search-homepage.md index a3a1cc3..98b81c7 100644 --- a/content/blog/web-search-homepage.md +++ b/content/blog/web-search-homepage.md @@ -258,10 +258,24 @@ The upload to the remote webserver can be done more elegantly. One idea is to use the backup/replication API of strus for this: build an index locally and sync it to the strusWebService. -Update March 2018: currently the ARM version of strus is completely broken +### Update 8.3.2018 + +Currently the ARM version of strus is completely broken and the strusWebService is being rewritten. So there will be an updated blog entry when those things are fixed. +### Update 29.4.2018 + +Replaced the web page search with an [Elasticlunr](http://elasticlunr.com/) +Javascript search, running 100% on the client for added security and load +distribution benefits. + +### Update 17.12.2023 + +Replaced the Elasticlunr search with a webassembly version of +[Sqlite Free Text Search 5](https://www.sqlite.org/fts5.html). +Also runs completely on the clients browser. + # Sources As always you can find the sources of the project on my github (also hosted @@ -271,5 +285,5 @@ http://git.andreasbaumann.cc/cgit/www-andreasbaumann-cc/ The strus specific scripts and configuration are in: -http://git.andreasbaumann.cc/cgit/www-andreasbaumann-cc/tree/strus +http://git.andreasbaumann.cc/cgit/www-andreasbaumann-cc/tree/search/strus diff --git a/content/contact/_index.md b/content/contact/_index.md index e01bd58..66cb333 100644 --- a/content/contact/_index.md +++ b/content/contact/_index.md @@ -30,27 +30,42 @@ tzehXAMDqBBPyqlL88XZUBpXTIOyHBqC1kDjwTsIla+6AgepIRZQ2KDUaZrpuvDZ jdnkclNZOIdmJapUfUu37CN4EP0noOkfvLOcsgqedWqtOox0GpGg5zoMFzG//O1H V8H8yj65hsUa2118wXyy5MJ3+a6UkMuROgW5Hingks7md0QHbjQqG8EZherqdYm7 9Aa74y/O82hhYFHJJzpcRUo5hFrUusF3+uWrABEBAAG0KEFuZHJlYXMgQmF1bWFu -biA8bWFpbEBhbmRyZWFzYmF1bWFubi5jYz6JAVQEEwEIAD4WIQQ4rKagJtJc3SJ9 -JIMvY5nc0iEhlQUCWaWx+AIbAwUJA8JnAAULCQgHAgYVCAkKCwIEFgIDAQIeAQIX -gAAKCRAvY5nc0iEhlfnMCADzJPsby7+rBDFmt/QR929SiE35Uod+Q91YWYlC23/E -o3HxRk01GAUmv6InN9cYJoCZEdcXDYJPtJhHjO/DSURDU2xx5gBd3gWbIFIsTiUi -ryqqDyeIoq+pMWzQ9LG3eQfdGfIcRu5jLem7k/naPCQvxSpHf6O3YekwHZqng6i3 -yDmwUp5CSNDxDqV7HnwW6d02kHvA+3Q6undDAWQF0XdP7wgm3mlMVLNkTqDmYeQS -ATptJcOpMEwi8t9mYmuiWYYPwDm492NScK5AoUF0WVK42aG5BEz2Oz9LVtcXKquu -17Zr6xcuKtgM71paCO3dxnlvef0HbFeHFmOTT6lqu1z2uQENBFmlsfgBCADfP4Se -cL8GvCKgVWuoM1tOEaZ/eND4jc4RcYTRdEiZYHfGah8S+kNd21Zpep++FSvQbwb+ -PjdQRbCwn+dBdxgpMhrLfZ3zy3Xtd4EEftq0y8Gyi+6ejJjk8eW7Xvl91objJSyh -J5Fx5v/K9bof9uCTLaWq/aFjcWpovsbbDWrq/OXowp8A69xMPAmJee8zW/Nj7Fv0 -sgQrIGNe3T4BWVncuuzP3YWxCB85ysk99l17joKrQx6w7FaG0e/n+gd1X0YRofYg -eu2UCpswbwfu7pwiWnNtgCajhaw47Og/9FMpsXGvuQs93pOLon7jLlPn1nsOaX5h -NkHfmyYabykXlpZBABEBAAGJATwEGAEIACYWIQQ4rKagJtJc3SJ9JIMvY5nc0iEh -lQUCWaWx+AIbDAUJA8JnAAAKCRAvY5nc0iEhlaMBCADIwsJwRi9XqkxaldehThkx -giQDp6M99J+quKLsevVRtDKi88tSWEhYRNKNjZLkmfQ8cKcR4eSDEIN9135RTK+w -mYq+IWgKIAPaFeMGQmBm2vlKTSpR4cuNMUCCToXwq4vUr5e/jRg+TzTf7j2pH7hi -HIQILaiU74g7KCcR2X8EUxG6Dus1Sk6zcvmnASBirw2M8bgarTBlr8GPpDUxnp7Q -LilZfyClqM29IfDjGOa+9RvOqHeC4m3xW8pqjIEuKOQeMmSY4xX7B01rFgILqhH4 -+IzlxIwq3xx0kxUup0zNLUtzBg2y9W6KX+VwruO4jH3qG91m3l/+1y1jRnQrtVkf -=hS12 +biA8bWFpbEBhbmRyZWFzYmF1bWFubi5jYz6JAVQEEwEIAD4CGwMFCwkIBwIGFQgJ +CgsCBBYCAwECHgECF4AWIQQ4rKagJtJc3SJ9JIMvY5nc0iEhlQUCZWIaRwUJDZ2b +zwAKCRAvY5nc0iEhlSkcCACWXadTea1QUA9Ny9RoEqKCnEN+IbnEyukewmsnq4Xc +6iX2MlkAxtPqUGxk8L3xxp1/q9s0yXaSNZjjBzj0uu0KS6QGDbTXDVzyC567jlbQ +qeDI8IfJlVZl28FJtPwuTOBqnxx+0BwEZX4WGoa3d+lhuuoqjpXw6Z4QZYVGEucW +m2Ri8qJFDpGXOjornaq7NJfhVx3Z8vNrwr0mipRG9B7HzleqPwwaJ/CmJrFeDY3B +Qv5cMTZiSPRUa/j/qh59rCwyhMlqX6MdOxQ62BaeapM0I4tS2CsdiRWxF+pWbRXc +rIB2Vb20J4h/R4IbHt/H078ABtPI2dwUs2VvPzf1lLjAiQFUBBMBCAA+FiEEOKym +oCbSXN0ifSSDL2OZ3NIhIZUFAlmlsfgCGwMFCQPCZwAFCwkIBwIGFQgJCgsCBBYC +AwECHgECF4AACgkQL2OZ3NIhIZX5zAgA8yT7G8u/qwQxZrf0EfdvUohN+VKHfkPd +WFmJQtt/xKNx8UZNNRgFJr+iJzfXGCaAmRHXFw2CT7SYR4zvw0lEQ1NsceYAXd4F +myBSLE4lIq8qqg8niKKvqTFs0PSxt3kH3RnyHEbuYy3pu5P52jwkL8UqR3+jt2Hp +MB2ap4Oot8g5sFKeQkjQ8Q6lex58FundNpB7wPt0Orp3QwFkBdF3T+8IJt5pTFSz +ZE6g5mHkEgE6bSXDqTBMIvLfZmJrolmGD8A5uPdjUnCuQKFBdFlSuNmhuQRM9js/ +S1bXFyqrrte2a+sXLirYDO9aWgjt3cZ5b3n9B2xXhxZjk0+partc9okBVAQTAQgA +PgIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgBYhBDispqAm0lzdIn0kgy9jmdzS +ISGVBQJdS9cGBQkHaIwOAAoJEC9jmdzSISGVEAcH/RfoMGcAw4A4GnlwQO3cBXIb +G6z06H/7gPuAwSwGETBCIh6D3rkpjSw7I8YqXsbpNzWloXOhRoX1jsy3a0Vy5rps +e6dddBXcyJOPSvTgNw3uWU0FbXQHlqVlwJ/SWQq882aOZZFnXITkaxzYK3TZtqRJ +p4vgszEHhtaycMfyeXQNmlWQY0SHXA9AVgxYecIvvxkxp1AZ4GrhHXR9KC40FcSY +CDvXluc6Uuscnl2t2Elxbjl8fpeb2Ifjy34AIUHB8vPPaVqfDfne6MbthYG8gG+s +92NQPlhYjUCPc/IbWD2IvNJObXbBna9jGYsEg0/rR0DzChkzNA5SxJXb6I8DX0e5 +AQ0EWaWx+AEIAN8/hJ5wvwa8IqBVa6gzW04Rpn940PiNzhFxhNF0SJlgd8ZqHxL6 +Q13bVml6n74VK9BvBv4+N1BFsLCf50F3GCkyGst9nfPLde13gQR+2rTLwbKL7p6M +mOTx5bte+X3WhuMlLKEnkXHm/8r1uh/24JMtpar9oWNxami+xtsNaur85ejCnwDr +3Ew8CYl57zNb82PsW/SyBCsgY17dPgFZWdy67M/dhbEIHznKyT32XXuOgqtDHrDs +VobR7+f6B3VfRhGh9iB67ZQKmzBvB+7unCJac22AJqOFrDjs6D/0Uymxca+5Cz3e +k4uifuMuU+fWew5pfmE2Qd+bJhpvKReWlkEAEQEAAYkBPAQYAQgAJgIbDBYhBDis +pqAm0lzdIn0kgy9jmdzSISGVBQJlM3LABQkNbvRIAAoJEC9jmdzSISGV3VsH/2or +KR4Dvf+KYmdjYRSJmN0qczO7x/IZx9WGCIUrKCj+11d8voDOGCPwleiPlDQ6UO0p +TknWn9oH0xuJoRLhZCaxCb04p2x1Urbscb09NJA9opibs3g8lbX1Mjdg3ayeUDb3 +5EkpowtI4tyjkX+sqtBYbwxgqg0kGwtt38xhLutilCIxSD8q92Sm92DKePaEAgGi +NqYf/QUfjWtwswo7B/vhIUNbCBIUk0oWtW9P3HfJ/nQfWyG+N7N9KEvrTXaJ2o0K +pLo22OY6Cg3qbLvbCkQ0/H30bPRQo7dqm6tvWP7V/Qy6PZX7NOiphka4cRw3uI8W +Q1qs4ogfoSGjc/IkYyc= +=3o73 -----END PGP PUBLIC KEY BLOCK----- ``` diff --git a/content/dataprotection/_index.md b/content/dataprotection/_index.md index 2d92266..0d35960 100644 --- a/content/dataprotection/_index.md +++ b/content/dataprotection/_index.md @@ -12,6 +12,11 @@ or Piwik. I do keep Apache log entries and firewall rules with IP, Date and User-Agent information for at most 7 days in order to fight attacks and spam. -Currently I'm using a Wordpress theme which uses Google fonts. -For more information about Google Fonts see https://developers.google.com/fonts/faq, -section "What does using the Google Fonts API mean for the privacy of my users?". +Currently I'm using a Wordpress theme which uses Bunny fonts. +For more information about Bunny Fonts see +[https://bunny.net/fonts/](https://bunny.net/fonts/). + +This page is available both via HTTPS and HTTP, because using retro +computers usually means you don't have the necessary libraries or +computing power for TLS. To learn more about this topic see +[http://neil.franklin.ch/Save_HTTP/index.html.en](http://neil.franklin.ch/Save_HTTP/index.html.en). diff --git a/content/git/_index.md b/content/git/_index.md index 4467646..1edb036 100644 --- a/content/git/_index.md +++ b/content/git/_index.md @@ -15,3 +15,7 @@ git clone git://git.andreasbaumann.cc/repo.git If you have comments or patches, you can send them via email. If you want to collaborate, I can give you write access. + +## Github + +Forked projects are on [Github](https://github.com/andreasbaumann?tab=repositories). diff --git a/content/hardware/_index.md b/content/hardware/_index.md new file mode 100644 index 0000000..ef4be4e --- /dev/null +++ b/content/hardware/_index.md @@ -0,0 +1,8 @@ ++++ +title = "Hardware" ++++ + +A (not so curated) list of "old" hardware I own: + +- [IMC-2001](/hardware/imc-2001): Taiwanese Apple \]\[ / CP/M clone +- [Book8088](/hardware/book8088): Modern 8088 XT-style laptop PC diff --git a/content/hardware/book8088-status-todos.md b/content/hardware/book8088-status-todos.md new file mode 100644 index 0000000..b02ba5e --- /dev/null +++ b/content/hardware/book8088-status-todos.md @@ -0,0 +1,21 @@ ++++ +title = "Book8088 Status and Todo List" ++++ + +# Todos + +Trying to fix several issues: + +- Minix 2.0.4: has some weird issues around IRQ handling. It gets stuck + in readclock (I suspect after every IRQ, because it happens also when + using sleep - which needs a hardware clock interrupt - and when printing + to serial). The CF uses _no_ interrupt, this explains why Minix 2 is + booting at all. + +# things known to work + +- DOS 6.22 with mTCP network stack and a NE2000 Kinston card +- Mini 1.7 boots and runs just fine +- Booting XT-IDE serially with DOS image +- Booting Minix 2.0 over serial using the Linux version of serdrive + from XT-IDE diff --git a/content/hardware/book8088.md b/content/hardware/book8088.md new file mode 100644 index 0000000..ee06868 --- /dev/null +++ b/content/hardware/book8088.md @@ -0,0 +1,18 @@ ++++ +title = "Book 8088" ++++ + +{{< figure src="/images/hardware/book8088/book8088.jpg" alt="Book8088" >}} + +This is a modern clone of a IBM PC (XT), with a NEC V20 CPU, compact flash, +VGA graphics, serial and parallel connector and a USB connector (which mainly +serves as mass storage device). It has 640k of RAM (yes exactly 640k). It runs +in 4 or 8 MHz speed (turbo mode). You can also connect 8-bit ISA-cards over +an ISA-bus extender with 3 slots (though this renders the laptop much less +portable). + +It runs the [8088 BIOS](https://github.com/skiselev/8088_bios) not the Chinese +pirated one. This one also includes the [XT-IDE](https://www.xtideuniversalbios.org/) +disk BIOS for the compact flash or serial disk drive. + +- [Status and Todos](/hardware/book8088-status-todos) diff --git a/content/hardware/imc-2001-chargen40.md b/content/hardware/imc-2001-chargen40.md new file mode 100644 index 0000000..84bf54a --- /dev/null +++ b/content/hardware/imc-2001-chargen40.md @@ -0,0 +1,90 @@ ++++ +title = "IMC-2001 40 character mode" ++++ + +{{< figure src="/images/hardware/imc-2001/chargen.png" alt="character in the 40-char ROM" >}} + +*A4-A6* on the schematics is the character ROM in a chip labelled +UMC UM2316-J127 8432, it is Intel 2716 EPROM compatible chip it seems. + +It can be read with the TL866 and returns the following 2K dump: + +[chargen.rom](/hardware/imc-2001/chargen.rom): Chargen 40-column ROM + +The official ROM +[3410036.BIN](http://www.applelogic.org/APPLEASICs.html) on +http://www.applelogic.org/APPLEASICs.html doesn't match +at all. The arangement of the characters is different and there are +lowercase characters in the clone ROM. + +I wrote a small program to show the contents of chargen.rom: + +``` +#!/usr/bin/tcc -run -Werror -DSDL_DISABLE_IMMINTRIN_H -I/usr/include/SDL2 -lSDL2 + +#include <stdio.h> +#include <stdlib.h> +#include <SDL.h> + +int main( int argc, char *argv[] ) +{ + FILE *f = fopen( "./chargen.rom", "r" ); + char *buf = malloc( 2 * 1024 ); + fread( buf, 2 * 1024, 1, f ); + + SDL_Renderer *renderer; + SDL_Window *window; + + SDL_Init( SDL_INIT_VIDEO ); + SDL_CreateWindowAndRenderer( 300, 200, 0, &window, &renderer ); + SDL_SetRenderDrawColor( renderer, 0, 0, 0, 0 ); + SDL_RenderClear( renderer ); + SDL_SetRenderDrawColor(renderer, 0xFF, 0xB0, 0, 255 ); + + int x = 0; + int y = 0; + for( int c = 0; c < 2 * 1024; c++ ) { + int v = buf[c] & 0x00ff; + for( int b = 0; b < 8; b++ ) { + if( v & 0x01 ) { + SDL_RenderDrawPoint( renderer, x, y ); + } + v >>= 1; + x++; + } + x -= 8; + y += 1; + if( ( (c+1) % 128 ) == 0 ) { + x += 10; + y = 0; + } + } + + SDL_RenderPresent( renderer ); + + int done = 0; + while( !done ) { + SDL_Event event; + SDL_PollEvent( &event ); + switch( event.type ) { + case SDL_QUIT: + case SDL_KEYDOWN: + done = 1; + break; + } + } + + + SDL_DestroyRenderer( renderer ); + SDL_DestroyWindow( window ); + SDL_Quit( ); + + free( buf ); + fclose( f ); + return 0; +} +``` + +And indeed I get: + +{{< figure src="/images/hardware/imc-2001/chargen.png" alt="character in the 40-char ROM" >}} diff --git a/content/hardware/imc-2001-documentation.md b/content/hardware/imc-2001-documentation.md new file mode 100644 index 0000000..20fce81 --- /dev/null +++ b/content/hardware/imc-2001-documentation.md @@ -0,0 +1,18 @@ ++++ +title = "IMC-2001 Documentation" ++++ + +# Operation Manual + +"Operation Manual for IMC-2001, version 2.01": + +{{< figure src="/images/hardware/imc-2001/manual_frontpage.jpg" alt="manual frontpage" >}} + +[The complete scanned manual](/hardware/imc-2001/manual_imc_2001_2.01.pdf) +(also on archive.org, see [https://archive.org/details/manual_imc_2001_2.01](https://archive.org/details/manual_imc_2001_2.01)) + +# Super Serial Card + +I got a super serial card from Ebay, the documentation of it can be +found here [https://archive.org/details/Apple_II_Super_Serial_Card_1981_Apple](https://archive.org/details/Apple_II_Super_Serial_Card_1981_Apple). + diff --git a/content/hardware/imc-2001-firmware.md b/content/hardware/imc-2001-firmware.md new file mode 100644 index 0000000..8e4aabc --- /dev/null +++ b/content/hardware/imc-2001-firmware.md @@ -0,0 +1,185 @@ ++++ +title = "IMC-2001 Firmware" ++++ + +{{< figure src="/images/hardware/imc-2001/romboard.jpg" alt="IMC-2001 ROM card" >}} + +# Intro + +The ROM consists of two ROM chips. The bigger chip labelled "ROM1" was +broken (it got really hot) and could not be read (it returned all zeroes). +It has no markings on it, so one can only guess it is something AT28C256 +compatible. + +The ROMs sit in the special "slot 0". The board has two other +unused ROM sockets and an arrow pointing to an additional ROM socket on +the motherboard itself. + +On the schematics the slot is not labelled "slot 0" but "ROM" and this +gives away it's special purpose for the machine. + +# ROM 2 + +ROM 2 (sticker with hand-written red 2 on top) is a Mitsubishi M5L2732K, +32k-bit, 4k-ROM, seems very ok during operation (the carvings say +"M5L2732K, 83080L, JAPAN"). + +## lower-case patch + +Comparing ROM2 to the standard Apple autostart ROM +(https://6502disassembly.com/a2-rom/AutoF8ROM.html) we see only one difference at: + +``` +FD80 (F800+580) + +AutoF8ROM +00000580 90 02 29 df 9d 00 02 c9 8d d0 b2 20 9c fc a9 8d |..)........ ....| +monitor.rom: +00000580 90 02 ea ea 9d 00 02 c9 8d d0 b2 20 9c fc a9 8d |........... ....| +``` + +``` +fd80: 90 02 bcc ADDINP +fd82: 29 df and #$df ;shift to upper case +fd84: 9d 00 02 ADDINP sta IN,x +fd87: c9 8d cmp #$8d +fd89: d0 b2 bne NOTCR +fd8b: 20 9c fc CROUT1 jsr CLREOL +fd8e: a9 8d CROUT lda #$8d +fd90: d0 5b bne COUT +``` + +*EA EA* are 2 nops where the *and #$df* is. This seems to do away with +uppercasing the byte coming from the keyboard, so that lower-case character +work. + +# ROM 1 + +ROM 1 is hard to guess, what it originally contained (as mine got fried). + +# addressing mode + +I put back the original Autostart ROM, the addressing on the PCB is a little +bit weird. As the monitor was working I could write a test ROM with + +``` +#!/usr/bin/tcc -run -Werror + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +int main( int argc, char *argv[] ) +{ + FILE *f = fopen( "./pattern.rom", "w" ); + char *buf = malloc( 1024 ); + for( int i = 0; i < 32; i++ ) { + memset( buf, i, 1024 ); + fwrite( buf, 1024, 1, f ); + } + fclose( f ); + free( buf ); + return 0; +} +``` + +and get the following pattern in the monitor: + +``` +D000 1C +D400 1D +D800 1E +DC00 1F +E000 18 +E400 19 +E800 1A +EC00 1B +``` + +So the replacement AT28C256 is arranged as follows: + +``` +0x6000 18 must contain the second 4k of the apple rom starting with e000 (24k) +0x7000 1c must contain the first 4k of the apple rom d000 +``` + +So I ended up doing this: + +``` +dd if=/dev/zero of=zero1 bs=1 count=24576 +dd if=Applesoft of=apple1 bs=1 skip=4096 count=4096 +dd if=Applesoft of=apple2 bs=1 count=4096 +cat zero1 apple1 apple2 > newrom1.rom +``` + +## Unkown difference + +When I watched the series on the Apple clone from Adrian's Digital Basement +(he has a nice 3 part mini-series on the fixing of an Apple clone of unknown +origin) I noticed the following difference: + +ROMS he published 'Apple\ II\ Clone\ ROM\ E0\ 300854cc.bin' which +has one single difference in the E000 ROM: + +``` + ; Convert FAC to integer. Must be -32767 <= FAC <= 32767. +e10c: a5 9d AYINT lda FAC ;exponent of value in FAC +e10e: c9 90 cmp #$90 ;abs(value) < 32768? +e110: 90 09 bcc MI2 ;yes, okay for integer +e112: a9 fe lda #<NEG32768 ;no; next few lines are supposed +e114: a0 e0 ldy #>NEG32768 ;to allow -32768 ($8000), but do not! +e116: 20 b2 eb jsr FCOMP ;because compared to -32768.00049 + ; <<< BUG: A=-32768.00049:A%=A is accepted, but PRINT A,A% shows that A=- + ; 32768.0005 (ok), A%=32767 (wrong!) >>> +``` + +instead of *a0e0* it has *a0e5* + +``` + ; <<< meant to be -32768, which would be 9080000000 >>> + ; <<< 1 byte short, so picks up $20 from next instruction >>> +e0fe: 90 80 00 00 NEG32768 .bulk $90,$80,$00,$00 ;-32768.00049 in floating point +``` + +maybe the variable got moved to *e5fe* for some reasons? hard to tell, especially +as the other ROMs have no differences. I kept mine on the original autostart ROM. + +## PIN Layout + +Found on https://forum.classic-computing.de/forum/index.php?thread/11666-apple-clon-gtac-fragen/&postID=401752#post457130 + +``` +Slot Rom1 Rom2 Slot Rom1 Rom2 + +Pin Pin + +26 12 14-12 25 28 24 +27 20,18 24 +28 22 23 +29 22 +30 21 +31 20 +32 19 +33 18 +34 17 +35 16 +36 15 +37 14 2 +38 13 23 +39 12 20 +40 11 24 +41 10 25 23 +42 9 3 1 +43 8 4 2 +44 7 5 3 +45 6 6 4 +46 5 7 5 +47 4 8 6 +48 3 9 7 +49 2 PIN10 8 +50 1 +``` + +## Links + +* https://forum.classic-computing.de/forum/index.php?thread/11666-apple-clon-gtac-fragen/&postID=401752#post457130 diff --git a/content/hardware/imc-2001-images.md b/content/hardware/imc-2001-images.md new file mode 100644 index 0000000..f7d3bdb --- /dev/null +++ b/content/hardware/imc-2001-images.md @@ -0,0 +1,20 @@ ++++ +title = "IMC-2001 Images" ++++ + +From the outside: + +{{< figure src="/images/hardware/imc-2001/computer_full.jpg" alt="IMC-2001" >}} + +Booting into Apple \]\[ CP/M 56k: + +{{< figure src="/images/hardware/imc-2001/cpm_40chars.jpg" alt="IMC-2001" >}} + +The motherboard and floppy drives: + +{{< figure src="/images/hardware/imc-2001/motherboard_internal.jpg" alt="IMC-2001" >}} + +The motherboard seems to be a CTAG-2 Taiwanese motherboard, so pretty standard. + +The floppy drives are standard TEAC-55A-U-00, with the short cable without the ground +pins between data lines presumably. diff --git a/content/hardware/imc-2001-keyboard.md b/content/hardware/imc-2001-keyboard.md new file mode 100644 index 0000000..aaeea43 --- /dev/null +++ b/content/hardware/imc-2001-keyboard.md @@ -0,0 +1,58 @@ ++++ +title = "IMC-2001 keyboard" ++++ + +connector to machine (sort of a rubber version of a DB-9): + +The connector on the computer side has a 9-pin DSUB connector male: + +``` + +----------- white INTR + | +--------- black GND + | | +------- green DATA + | | | +----- blue RESET + | | | | +--- Yellow CLOCK +------------- +\ O O O O O / + \ O O O O / + --------- + | | | +---- red 5V + | | +------ n.c. + | +-------- n.c. + +---------- n.c. +``` + +On the keyboard PCB there is a strange white connector with the following layout: + +``` + +------------- white INTR (active low, after last clock tick) + | +----------- black GND + | | +--------- blue RESET (active low) + | | | +------- green DATA + | | | | +----- yellow CLOCK + | | | | | +--- red +5V + +-----------+ + |o o o o o o| + +-----------+ + | | +``` + +Keyboard layout: + +{{< figure src="/images/hardware/imc-2001/keyboard_front.jpg" alt="keyboard layout" >}} + +Keyboard has a 8039 CPU inside and a 2K EPROM: + +{{< figure src="/images/hardware/imc-2001/keyboard_pcb_controller_prom.jpg" alt="PCB and controller" >}} + +On the oscilloscope: + +{{< figure src="/images/hardware/imc-2001/oscilloscope_serial_keyboard.jpg" alt="serial keyboard signal" >}} + +The protocol is basically ASCII over 19200 baud serial, with an interesting end signal which +IMHO triggers a latch on the motherboard or so (INTR white above). + +Broken keyboard cable (the black pins are just connectors added by me to test connectivity, +both connector are female per default): + +{{< figure src="/images/hardware/imc-2001/keyboard_cable.jpg" alt="PCB and controller" >}} diff --git a/content/hardware/imc-2001-links.md b/content/hardware/imc-2001-links.md new file mode 100644 index 0000000..2d8a421 --- /dev/null +++ b/content/hardware/imc-2001-links.md @@ -0,0 +1,19 @@ ++++ +title = "IMC-2001 Links" ++++ + +## Other IMC-2001 + +* [Mention of the IMC-2001](http://www.epocalc.net/php/liste_models.php?texte=&look=All+fields&yearmax=2018&nocomp=pc&cat=Apple+2+clone): + mentions it on the list of Apple clones +* [Youtube video of similar machine](https://www.youtube.com/watch?v=c7crlJg80Zg): + "APPLE II CLONE + CP/M ------- IMC 2001 made in taiwan.--------", Retro Computacion Argentina Jorge E. Nuviola + +## Other Similar Clones + +* West PC 800: + - Pietro Filiberi: https://www.youtube.com/@dustylife/videos + - Retro Erik: https://www.youtube.com/watch?v=Kop7mHEmJyM +* https://github.com/eyalabraham/apple2 or + https://github.com/pfiliberti/gtac-appleclone +* http://john.ccac.rwth-aachen.de:8000/patrick/MEWA48.htm diff --git a/content/hardware/imc-2001-power.md b/content/hardware/imc-2001-power.md new file mode 100644 index 0000000..ee8e3a1 --- /dev/null +++ b/content/hardware/imc-2001-power.md @@ -0,0 +1,26 @@ ++++ +title = "IMC-2001 Power and PSU" ++++ + +Power connector on the motherboard: + +``` ++-------------+ +| O O O O O O | ++-------------| + | | | | | +--- GND black + | | | | +----- +12V red + | | | +------- -5V blue + | | +--------- -12V brown + | +----------- +5V white + +------------- +5V white +``` + +Old PSU: + +{{< figure src="/images/hardware/imc-2001/old_psu.jpg" alt="New PSU" >}} + +New PSU replacing the old crusty one (this is a standard replacement PSU for +Apple \]\[ from [Reactive Micro](https://wiki.reactivemicro.com/Universal_PSU_Kit)): + +{{< figure src="/images/hardware/imc-2001/new_psu.jpg" alt="New PSU" >}} diff --git a/content/hardware/imc-2001-status-todos.md b/content/hardware/imc-2001-status-todos.md new file mode 100644 index 0000000..9ba7995 --- /dev/null +++ b/content/hardware/imc-2001-status-todos.md @@ -0,0 +1,133 @@ ++++ +title = "IMC-2001 Status and Todo List" ++++ + +# Todos + +Trying to fix several issues: + +- CPM65 works on the machine in 40-character mode (hacked), the + Videx card is the next goal. The 40-character mode still is quite + unreliable and crashes the machine, the screen TTY driver is still + to be done for apple2. +- the 5V rail is on 4.5V now, causing issues with the keyboard (the + length of the cable) and with the paddles. Not clear, whether this + is the PSU (which is also showing 4.7V without load) or something + on the motherboard. There are two +5V lines on the original PSU and + only one on the replacement PSU, maybe that's a problem? +- the keyboard beeps and issues '=' and '/' characters when connected + to a longer serial cable, no problems when connecting the botched + wire from the old connector on the keyboard PCB directly to the + computer. Some shielding or capacitance issue? It also appeared + only after playing with the paddle connectors. +- the new paddle connector with DIN-5 connectors works somewhat with + paddle 0, though the nob is not totally up when on 255. This indicates + again a capacitance issue, probably with the cable itself? +- two new teac drives turned out to have the very wrong connector for + an Apple \]\[ disk controller, some adapted has to be designed and + a PCB has to be printed. +- strange issues with floppy images not working in LinApple or also + not on the real computer, always bailing out in the monitor in strange + locations. Used Fluxengine and ADTPro to get images, they are identical. + Checked the RAM of the machine, no errors. Must investigate if boot + addresses are the issue (48k floppy masters not working on 64 or similar + issues) +- HGR shows a line on row 0 only partially. This could be an adjustment issue + of the CRT image or also bad RAM. +- the CRT shows some flickering and diagonal effects. Testing on an old TV + shows the same issue (so I suspect it's some grounding/shielding issue + with the new PSU). +- the CRT is producing some flickering when turning the brightness nob, + this should be fixable with some deoxit. +- the second floppy drive (the more used one) now sees floppies always as + "write protected". Diagnostic tests show alignment issues of the drive, this + could be true, or the clone always had a different alignment than a default + Apple 2 drive? +- the paddle wire is self-made on paddle 1 and quit a mess. Doing a rewire + with DIN-5 connectors which then lead to a 9-pin DSUB-Apple ][ standard + joystick connector, which will go to the 16-pin DIP socket on the motherboard. + The original joystick connector has a completely weird layout and is not usable + (it has no Apple 2 layout) +- really bad design to connect DIP 2x8 cables of the joystick and the paddles + directly on the motherboard, you pull the cable a little bit too much and + you tar out half of the motherboard. +- possibly much more + +# Fixed Issues + +- ~~the paddle and the joystick connectors miss some legs for putting them into + the sockets on the motherboard~~. No essential pins are missing, will + rework this anyway as a 8x2 DIP to 9-DSUB, from there to an adapter + where you can connect 2 DIN-5 cables, needs rewiring of both paddles. +- ~~paddle 0 seems to be a little bit shacky (the button works unreliably)~~. + DeOxit in the button helped. Works much better now. +- ~~the lever moving the contacts between 40-character and 80-character + mode for the CRT output is corroded, doesn't always make contact + and produces a flickering image~~. The box is heavily sealed and there + is no easy way to fix it. Using an audio switch box for switching modes now + (the cables are standard audio-like cinch connectors). +- ~~the floppy drives read floppies (both) but they don't write to floppies + (when copying in CP/M or creating a file), they work when formatting + a drive on CP/M though. ~~Could be a side-effect of the PSU not working properly.~~ + The PSU has been replaced, the voltages look ok, so I rule out the PSU. + Could be some missing code in the Apple ROM (but that would be weird to + call 6502 firmware code from the Z80 CPU). It could also be the write + current being to low for writting (but why does formatting a drive work then?!)~~ + So, yes. DOS 3.3 and CP/M both use some ROM routines from ROM1 to write to disk. + Works now. +- ~~floppies written read/written with Fluxengine don't really work either + on the real hardware or the emulator. Suspecting a encoding/decoding issue.~~ + Updating Fluxengine solved the issue, also choosing 96dpi 5 1/4" for the real + floppy drive. :-) +- ~~the keyboard reset line cannot be taken to ground on the keyboard, works + with shrtening ground and reset though just fine. Must be a bug on the + ICs of the keyboard controller or a broken trace.~~ Fixed with a botch + to bridge the broken ribbon cable between keyboard matrix and the PCB with + the controller logic. +- ~~ROM 1 with BASIC is broken (and gets really hot). This explains + the booting issues.. (will be tricky to get a replacement). The + board layout doesn't fit to the original ROM sizes too..~~ + Got an AT28C256, no more frying of chips, Apple Basic prompt appears, + tested some commands and it seems fine. The 32k ROM has to be filled in + starting from 0x6000 with #E000-$EFFF and from $7000 with $D000-$DFFF. + If this ROM is ok we will see. +- Reseated and deoxied all ICs, some of them were quite corroded, at + least 3 more turned out to be bad. ~~Sadly it didn't have an effect on + ROM 1 not getting hot (must be something else).~~ The new replacement + ROM works fine and doesn't get hot. So I actually blame it on the ROM + itself causing the other ICs to fry and not vice-versa. +- ~~power switch made some hissing noises, it was not the switch, now + the original power is dead (and some transformers are humming). Ordered + a Apple 2 replacement PSU, waiting for it..~~ + The new replacement power supply works like a charm, also replaced + the power switch, the old one was too unreliable. +- ~~sometimes I get into the monitor~~ +- ~~lower-nibble bit 3 of the key + being pressed is missing, unclear where it is lost, I suspect a + bad register on the motherboard holding the current ASCII value of + the key pressed or something similar~~. Replaced a bad 74LS257N, + works now just fine. + +# Not fixed issues: + +- ~~The 220V fan no longer works.~~ + I just disconected it, I don't think, it really helps to cool the system. + +# Known things to work: + +- The keyboard works electronically (8039 MCS-48 like CPU with a 2K EPROM), + has a new serial cable now and is fully functional +- the Rockwell R6502 CPU has a phase 0 clock and seems to go through + address lines and output data (another strong indicator is the 'Apple \]\[' + sign on the monitor when switching on which indicates 6502, 40-character + ROM, video circuit seems to be just fine). +- Monitor is working just fine (which is sort of amazing for such an old + CRT monitor). +- I can boot from a Apple \]\[ CP/M 56k floppy and I get a prompt, now + as the keyboard works and the CP/M on the 80-character card I can also + assume the Z80 is working just fine. +- the 80-columns card (a Videx Videoterm or rather a clone of it) works just fine. +- the highres graphic mode works just fine, I can run "Peter Anvin Chess" and play it. +- Applesoft BASIC works fine +- the new Super Serial Card II I got works fine, though it looses characters + (without parity and adding some delay in minicom). Definitely usable. diff --git a/content/hardware/imc-2001.md b/content/hardware/imc-2001.md new file mode 100644 index 0000000..608e455 --- /dev/null +++ b/content/hardware/imc-2001.md @@ -0,0 +1,18 @@ ++++ +title = "IMC-2001" ++++ + +{{< figure src="/images/hardware/imc-2001/computer_full.jpg" alt="IMC-2001" >}} + +This is an old Taiwanese Apple \]\[ / CP/M clone. + +- [Status and Todos](/hardware/imc-2001-status-todos) +- [Keyboard](/hardware/imc-2001-keyboard): keyboard connector and protocol +- [Power](/hardware/imc-2001-power): PSU and power +- [Chargen40](/hardware/imc-2001-chargen40): 40-column character mode +- [Firmware](/hardware/imc-2001-firmware): the monitor, Applesoft ROMs +- [Documentation](/hardware/imc-2001-documentation): documentation about the machine + and peripherals +- [Images](/hardware/imc-2001-images) +- [Links](/hardware/imc-2001-links): links to other similar machines + diff --git a/content/search/_index.md b/content/search/_index.md index 80efd10..1c0d6d7 100644 --- a/content/search/_index.md +++ b/content/search/_index.md @@ -2,4 +2,6 @@ title = "Search" +++ -The search is using [ElasticLunr](http://elasticlunr.com/). +<!-- The search is using [ElasticLunr](http://elasticlunr.com/). --> + +The search is using [FTS5 Sqlite3 in sql.js](https://www.skypack.dev/view/sql.js-fts5). diff --git a/content/slide/_index.md b/content/slide/_index.md index ce5b956..eab5ab6 100644 --- a/content/slide/_index.md +++ b/content/slide/_index.md @@ -6,10 +6,10 @@ title = "Slides" * [OBS Build System](/slide/obs): how to package C++ software with the help of the [Open Build Service](http://build.opensuse.org). Used in - the [Strus](http://project-strus.net) project. + the [Strus](http://project-strus.net) project (2015). ## Strus -* [Strus Web Service](http://eurospider.github.io/strusWebService/doc/slides/strus-webservice.html): a web service written +* [Strus Web Service](/slide/strus-webservice): a web service written with [CppCMS](http://cppcms.com) exposing the [Strus](http://project-strus.net) - APIs as a JSON protocol similar to [Elasticsearch](http://www.elastic.co/products/elasticsearch). + APIs as a JSON protocol similar to [Elasticsearch](http://www.elastic.co/products/elasticsearch) (2015, 2016). diff --git a/content/slide/strus-webservice.md b/content/slide/strus-webservice.md new file mode 100644 index 0000000..2638e6e --- /dev/null +++ b/content/slide/strus-webservice.md @@ -0,0 +1,411 @@ ++++ +title = "strusWebService" ++++ + + <div class="reveal"> + + <!-- Any section element inside of this container is displayed as a slide --> + <div class="slides"> + <section> + <h1>Strus - Web Service</h1> + <p> + <small>Created by <a href="http://www.andreasbaumann.cc">Andreas Baumann</a></small> + </p> + <p> + <small><a href="http://www.andreasbaumann.cc/slide/strus-webservice">http://www.andreasbaumann.cc/slide/strus-webservice</a></small> + </p> + <p><small>(C)2015/2016</small></p> + </section> + + <section> + <h2>Outline</h2> + <ul> + <li>Have a web service, language independent, for search.</li> + <li>The software to the vision exists, it's called <b>Elasticsearch.</b></li> + <li>Based on Lucene, so we do the same with Strus</li> + <li>Currently there is a Java API which uses this service</li> + </ul> + </section> + + <section> + <h2>Strus web service</h2> + <ul> + <li>uses JSON and HTTP GET/POST</li> + <li>implemented using <a href="http://cppcms.com/wikipp/en/page/main">CppCMS</a></li> + <li>uses only the <a href="http://patrickfrey.github.io/strus/doc/doxygen/html/index.html">Strus core API</a> currently</li> + </ul> + </section> + + <section> + <h2>Design rationales</h2> + <ul> + <li>standard technology (HTTP, JSON)</li> + <li>CRUD (all basic functions exists for all classes)</lib> + <li>proxyable and securable</li> + <li>zero-configuration</li> + <li>scalable</li> + <li>C++</li> + <li>MPL v2</li> + <li>runs on Linux, OSX, FreeBSD</li> + </ul> + </section> + + <section> + <h2>Protocol</h2> + <ul> + <li>Service functions</li> + <li>Index functions</li> + <li>Document functions</li> + <li>Query functions</li> + <li>Transactions</li> + <li>Statistics</li> + <li>Introspection and Configuration</li> + </ul> + </section> + + <section> + <h2>Protocol</h2> + <ul> + <li>Manipulate indexes: + <pre><code class="hljs" data-trim contenteditable> +curl -XPOST -H 'Content-Type: application/json' +http://localhost:8080/strus/index/create/A +'-d { "params" : { } }' + +{"result":"ok"} + +curl -XPOST http://localhost:8080/strus/index/delete/A +{"result":"ok"} + +curl -XPOST http://localhost:8080/strus/index/exists/A +{"exists":false,"result":"ok"} + + </code></pre> + </li> + </ul> + </section> + + <section> + <h2>Protocol</h2> + <ul> + <li>Insert document: + <pre><code class="hljs" data-trim contenteditable> +curl -XPOST -H 'Content-Type: application/json' +http://localhost:8080/strus/document/insert/A +-d +{ "doc" : { "docid" : "doc3", + "attributes" : [ + { "key" : "title", "value" : "This is a Hello World Document" }, + { "key" : "attr1", "value" : "val1" }, + { "key" : "attr2", "value" : "val2" } ], + "metadata" : [ + { "key" : "doclen", "value" : 23773 }, { "key" : "docweight", "value" : 3.1415 } ], + "forward" : [ + { "type" : "word", "value" : "Hello", "pos": 1 }, + { "type" : "word", "value" : "World", "pos" : 2 } ], + "search" : [ + { "type" : "Word", "value" : "hello", "pos": 1 }, + { "type" : "word", "value" : "world", "pos" : 2 } ] } +} + </code></pre> + </li> + </ul> + </section> + + <section> + <h2>Protocol</h2> + <ul> + <li>Query: + <pre><code class="hljs" data-trim contenteditable> +curl -XPOST -H 'Content-Type: application/json' +http://localhost:8080/strus/query/A +-d +{ "query": { + "first_rank": 0, + "nof_ranks": 20, + "weighting": { + "scheme": { + "name": "bm25", + "params": [ + { + "key": "b", + "value": 0.75 + }, + { + "key": "k1", + "value": 1.0001 + }, + { + "key": "avgdoclen", + "value": 11943 + } + ] + } + }, + "summarizer": [ + { + "attribute": "attribute", + "name": "attribute", + "params": [ + { + "key": "name", + "value": "docid" + } + ] + } + ], + "features": [ + { + "name": "feat", + "value": { + "term": { + "type": "word", + "value": "hello" + } + }, + "weight": 1 + }, + { + "name": "sel", + "value": { + "expression": { + "operator": "union", + "range": 0, + "cardinality": 0, + "terms": [ + { + "term": { + "type": "word", + "value": "hello" + } + } + ] + } + }, + "weight": 1 + } + ], + "select": [ + "sel" + ] +} + +{ + "execution_time": 0.000983791, + "ranklist": { + "documents_ranked": 1, + "documents_visited": 1, + "passes_evaluated": 0, + "ranks": [ + { + "attributes": [ + { + "key": "docid", + "value": "doc3" + } + ], + "docno": 1, + "weight": 0 + } + ] + }, + "result": "ok" +} + </code></pre> + </li> + </ul> + </section> + + <section> + <h2>Protocol</h2> + <ul> + <li>Transactions: + <pre><code class="hljs" data-trim contenteditable> +curl -XPOST -H 'Content-Type: application/json' +http://localhost:8080/strus/transaction/begin/A/T1 + +curl -XPOST -H 'Content-Type: application/json' +http://localhost:8080/strus/document/insert/A +-d +{ "transaction" : { "id" : "T1" }, + "doc" : { "docid" : "doc1", + ... +} + +curl -XPOST -H 'Content-Type: application/json' +http://localhost:8080/strus/transaction/commit/A/T1 + </code></pre> + </li> + </ul> + </section> + + <section> + <h2>Protocol</h2> + <ul> + <li>Introspection (document): + <pre><code class="hljs" data-trim contenteditable> +curl -XPOST -H 'Content-Type: application/json' +http://localhost:8080/strus/document/get/A/doc3 + +{ + "doc": { + "attributes": [ + { + "key": "attr1", + "value": "val1" + }, + { + "key": "attr2", + "value": "val2" + }, + { + "key": "docid", + "value": "doc3" + }, + { + "key": "title", + "value": "This is a Hello World Document" + } + ], + "docno": 1, + "forward": [ + { + "pos": 1, + "type": "word", + "value": "Hello" + }, + { + "pos": 2, + "type": "word", + "value": "World" + } + ], + "metadata": [ + { + "key": "docweight", + "value": 3.141499996185303 + }, + { + "key": "doclen", + "value": 23773 + }, + { + "key": "date", + "value": 0 + } + ], + "search": [ + { + "pos": 1, + "type": "word", + "value": "hello" + }, + { + "pos": 2, + "type": "word", + "value": "world" + } + ] + }, + "execution_time": 0.00028157, + "result": "ok" +} + </code></pre> + </li> + </ul> + </section> + + <section> + <h2>Protocol</h2> + <ul> + <li>Statistics and introspection (index): + <pre><code class="hljs" data-trim contenteditable> +curl http://localhost:8080/strus/index/stats/A + +{"result":"ok","stats":{"nof_docs":1}} + +curl http://localhost:8080/strus/index/config/A + +{"config":{ + "attributes":["attr1","attr2","docid","title"], + "metadata":[{"name":"date","type":"UInt16"},{"name":"doclen","type":"UInt16"},{"name":"docweight","type":"Float32"}], + "types":["word"]}, +"result":"ok"} + </code></pre> + </li> + </ul> + </section> + + <section> + <h2>Protocol</h2> + <ul> + <li>Statistics and introspection (system): + <pre><code class="hljs" data-trim contenteditable> +curl http://localhost:8080/strus/config +{"config":{ + "posting_join_operators":[ + "chain","chain_struct","contains","diff","inrange","inrange_struct","intersect","pred","sequence","sequence_struct","succ","union","within","within_struct"], + "summarizer_functions":[ + "accuvariable","attribute","matchphrase","matchpos","matchvariables","metadata"], + "weighting_funtions":[ + "bm25","formula","metadata","td","tf"]}, +"result":"ok"} + + ... + "weighting_functions": [ + { + "description": "Calculate the document weight with the weighting scheme \"BM25\"", + "name": "bm25", + "parameter": [ + { + "description": "defines the query features to weight", + "name": "match", + "type": "feature" + }, + { + "description": "parameter of the BM25 weighting scheme", + "name": "k1", + "type": "numeric" + }, + ... + </code></pre> + </li> + </ul> + </section> + + <section> + <h2>Strus web service</h2> + <h3>Links</h3> + <ul> + <li><a href="http://github.com/patrickfrey/strusWebService">http://github.com/patrickfrey/strusWebService</a></li> + </ul> + </section> + + <section> + <h2>Java API</h2> + <ul> + <li>Uses latest Java 1.8 (aka requires Java 1.8)</li> + <li>Uses Jackson for POJO serialization from/to JSON</li> + <li>uses javax.ws.rs.client web service classes for HTTP</li> + </ul> + </section> + + <section> + <h2>Java API</h2> + <p><b>Note:</b> dead, no longer maintained or developed!!</p> + <h3>Links</h3> + <ul> + <li><a href="http://github.com/Eurospider/strusJavaAPI">http://github.com/Eurospider/strusJavaAPI</a></li> + <li><a href="http://eurospider.github.io/strusJavaApi/apidocs/index.html">JavaDoc</a></li> + </ul> + </section> + + <section> + <h2>Todos and future</h2> + <ul> + <li>support all functions from all strus APIs, not only small part of query and storage interface</li> + <li>reimplementation (C++11, alternatives to cppcms?, HTTP/2.0 support? using new strusBindings)</li> + </ul> + </section> + </div> + </div> diff --git a/content/software/OpenBSD_firewall.md b/content/software/OpenBSD_firewall.md index a03ec00..baa9794 100644 --- a/content/software/OpenBSD_firewall.md +++ b/content/software/OpenBSD_firewall.md @@ -8,15 +8,15 @@ description = "OpenBSD firewall via scripts" Earlier versions of this project were used at Eurospider by Mihai Barbos (https://github.com/mbarbos) to build corporate-style firewalls with Portwell hardware. -Newer versions run on Soekris hardware now. +It ran on a Soekris net6501 for 4 years. -I merely collected the ideas and updated them to new versions of OpenBSD and cleaned up the repository a little bit. :-) +Newer versions run on a Network LES of Thomas Krenn now. -And I'm using it at home. +I merely collected the ideas and updated them to new versions of OpenBSD and cleaned up the repository a little bit. :-) -## Github +And I'm using it at home on an Alix 2D.13. -The old unsupported version can still be found on https://github.com/Eurospider/OpenBSD-firewall. +## Git Further development happens on git://git.andreasbaumann.cc/OpenBSD-firewall.git or http://git.andreasbaumann.cc/cgit/OpenBSD-firewall/. @@ -51,11 +51,57 @@ or remotely (after booting from floppy dongle or from hard disk): ## News +14.4.2024: + + updated to OpenBSD 7.5 + +19.10.2023: + + updated to OpenBSD 7.4 + +20.4.2023: + + updated to OpenBSD 7.3 + +22.10.2022: + + updated to OpenBSD 7.2 + +1.5.2022: + + updated to OpenBSD 7.1 + +24.10.2021: + + updated to OpenBSD 7.0 + +3.6.2021: + + updated to OpenBSD 6.9 + +22.10.2020: + + updated to OpenBSD 6.8 + +5.6.2020: + + updated to OpenBSD 6.7 + +20.10.2019: + + updated to OpenBSD 6.6 + +11.05.2019: + + updated to OpenBSD 6.5 + +28.10.2018: + + updated to OpenBSD 6.4 + 06.05.2018: - The firewall at Eurospider has not been updated in years and I'm fed up with - Github and the world in general, so I moved the repo and abandoned the old - development area on Github. + moved repository from Github to a local repository. 15.04.2018: @@ -127,11 +173,13 @@ At Eurospider we had Portwell NAR-2054 (3 and 5 ethernet port versions), some have VGA ports and USBs, others only COMs, so make sure we always get boot output on COM. -Now at Eurospider we run it on a Soekris net6501, but I'm not going to -update and test that one anymore. +It ran on a Soekris net6501 for 4 years, then the Soekris died. + +Newer versions run on a Network LES of Thomas Krenn now. At home I'm running it on an ALIX.2D13 with 3 LAN ports and a WLAN card. -VirtualBox build and test + +## VirtualBox build and test Create a VMDK wrapper for the disk image built with 'build.sh firewall-test': diff --git a/content/software/linux_packaging.md b/content/software/linux_packaging.md index e6bd7cc..805aa2c 100644 --- a/content/software/linux_packaging.md +++ b/content/software/linux_packaging.md @@ -20,7 +20,7 @@ I stopped to maintain the CRUX packages. I'm still maintaing some ARCH Linux packages, mainly things I need for personal hacking. -See my [ARCH packages](http://aur.archlinux.org/packages.php?SeB=m&K=andreas_baumann). +See my [ARCH packages](https://aur.archlinux.org/packages?O=0&SeB=M&K=andreas_baumann&outdated=&SB=p&SO=d&PP=50). I'm also taking part in the [Archlinux32](https://www.archlinux32.org) project, an effort to keep 32-bit Intel alive for Archlinux. diff --git a/content/software/nagios_plugin_curl.md b/content/software/nagios_plugin_curl.md index bd83c2c..1867b9f 100644 --- a/content/software/nagios_plugin_curl.md +++ b/content/software/nagios_plugin_curl.md @@ -3,17 +3,15 @@ title = "Nagios Curl Plugin" description = "a [Nagios](http://www.nagios.org) plugin replacing check_http" +++ -In my job I'm sometimes the deputy of the system administrator. -Using nagios/zabbix/SNMP for monitoring I needed a decent plugin -for Nagios to do HTTP alive checks. The standard one had some problems +In my job I'm taking care of a monitoring system using nagios. +For monitoring web sites I needed a decent plugin for Nagios to do +HTTP(s) alive checks. The standard 'check_http' plugin had some problems mainly with chunked transfer encoding, thus I hacked a plugin using the excellent [libCurl library](http://curl.haxx.se). Further development goes on as 'check_curl' in -[monitoring-plugins](https://github.com/monitoring-plugins/monitoring-plugins) -in branch -feature_check_curl. If you want help out testing or developing it -should happen there. +[monitoring-plugins](https://github.com/monitoring-plugins/monitoring-plugins). +If you want help out testing or developing it should happen there. An old archived version of the plugin can be found at http://git.andreasbaumann.cc/cgit/nagios-plugin-curl/. diff --git a/content/toolbox/_index.md b/content/toolbox/_index.md index 5b45780..1c6b78c 100644 --- a/content/toolbox/_index.md +++ b/content/toolbox/_index.md @@ -13,8 +13,10 @@ Some things I found to be useful for daily programming. I use mainly the memory checker and the profiler. * [KCachegrind](https://kcachegrind.github.io/html/Home.html): graphical profiler presenting runs of valgrind performance checks in a nice way. -* [xxdiff](http://furius.ca/xxdiff/): 2 and 3-way graphical diff tool, +* [xxdiff](https://github.com/blais/xxdiff/): 2 and 3-way graphical diff tool, I use it because of nostalgia (aka: I got used to it). +* [entr](http://eradman.com/entrproject/): for executing a command on + changed files, e.g. make. ## C Programming @@ -24,7 +26,9 @@ Some things I found to be useful for daily programming. ## Database Modelling * [dbmodel](http://oxygene.sk/projects/dbmodel/): a very neat - database modeller with PDF and image export. + database modeller with PDF and image export. (For Qt5 there + are fixed versions at http://git.andreasbaumann.cc/cgit/dbmodel/?h=qt5, + branch 'qt5' or https://git.eckner.net/Erich/dbmodel/) ## Data processing @@ -35,9 +39,6 @@ Some things I found to be useful for daily programming. ## Infrastructure -* [openSUSE Build Service](https://build.opensuse.org/): for building - release packages in the cloud. -* [Travis CI](http://travis-ci.org/): for continuous integration on Mac OSX. * Using [libvirtd](http://libvirt.org) now instead of VirtualBox (sorry, Oracle). Main reason: it's still a little bit un-ready round the edges but hey, it's really open source. :-) @@ -60,21 +61,61 @@ Some things I found to be useful for daily programming. ## Other -* [Ion3](http://tuomov.iki.fi/software/): tiling window manager with +* [Ion3](http://tuomov.iki.fi/software/ion/): tiling window manager with strong keyboard and Lua scripting support. Sadly the original author got into fights with the open source community :-( - I'm currently using the fork [Notion](http://notion.sourceforge.net/). - Read [http://raboof.github.io/notion/tour/](http://raboof.github.io/notion/tour/) + I'm currently using the fork [Notion](https://sourceforge.net/projects/notion/). + Read [http://raboof.github.io/notion/](http://raboof.github.io/notion/) if you want to learn how to use such a window manager. * [Joe](http://en.wikipedia.org/wiki/Joe's_Own_Editor): my editor for - all quick editing jobs. Having used a lot of Wordstar in my youth, - **jstar** is the editor I can't get rid of in my brain. :-) + all quick editing jobs. Having used a lot of Wordstar and Turbo Pascal IDEs + in my youth, **jstar** is the editor I can't get rid of in my brain. :-) * [meh](http://www.johnhawthorn.com/meh/): as fast and easy an image - viewer can possibly get. + viewer can possibly get. I use a fork which adds QOI support (see + https://github.com/andreasbaumann/meh/tree/qoi) * [MuPDF](http://www.mupdf.com/): an equally fast PDF/XPS viewer. * [Trojitá](https://en.wikipedia.org/wiki/Trojit%C3%A1): a simplistic and really fast mail reader for IMAP accounts. For long-term archiving - of email I'm using a combination of [OfflineIMAP](http://www.offlineimap.org) - and good old [Mutt](http://mutt.org). -* [Seamonkey](http://www.seamonkey-project.org/): back to old SeaMonkey, - fast, no clue what they did to Firefox to make it so slow. + of email I'm using [Mutt](http://mutt.org) with POP3 and a maildir + directory (proved to be extremely stable over time). +* [Luakit](https://luakit.github.io/): webkit-based browser, highly customizable + with Lua scripting +* [Palemoon](https://www.palemoon.org): derived from Firefox, uses much much less + resources than Chromium or modern Firefox while still supporting almost everything + I need from a web browser. +* [irssi](https://irssi.org/): for chatting (terminal) +* [newsboat](https://newsboat.org/): a RSS feed reader looking like mutt + (I'm using the old pure-C++/non-Rust version I forked as + [newsboat-og](https://github.com/andreasbaumann/newsboat-og)) +* [Wordgrinder](https://cowlark.com/wordgrinder/): really nice text editor + if actually all you want to do is writting some text +* [Suckless](https://suckless.org/): pretty much every software there is + 10 times smaller and easier to use than whatever makes up the default + Linux user land. I'm a big fan of it.. it only should be the standard + on every Linux system. +* [Ripcord](https://cancel.fm/ripcord/): way faster alternative to + Discord (and yes, I also pay for software - Slack), no video capabilities + though, just audio and chat but that's usually all I need. The Electron + based Discord and Slack are just so unbearably slow, if I need that + experience I can as well start the browser version. +* [Hugo](https://gohugo.io/): static web page generator for all kind of + web pages. + +## Deprecated + +The following tools I used in the past, but not anymore: + +* [Seamonkey](http://www.seamonkey-project.org/): Seamonkey slowly gets + all the "features" of Mozilla (slow, Rust build problems, out-of-memory + when building and linking). So I lost interest in it. I replaced it with + Palemoon/Luakit and mutt/trojita, irssi, etc.. +* [Librewolf](https://librewolf-community.gitlab.io/): fork of Firefox, + without all the built-in stuff from Mozilla nobody needs or asked for. + I'm no longer using it, as compiling it is too much of a hazzle with + frequent Rust incompatibilities.. +* [openSUSE Build Service](https://build.opensuse.org/): for building + release packages in the cloud. They deleted my home project and I'm + no longer doing software development, really. +* [Travis CI](http://travis-ci.org/): for continuous integration on Mac OSX. + Don't care about building on Apple anymore due to all kind of reasons.. + |