I am hiring (ASML Veldhoven Netherlands)

As you may know, I am working at ASML since 2016, first in a technical IT role but nowadays as an IT Group Leader focusing on providing services and solutions in Virtual Product Development (VPD) and Engineering Simulation (simulation driven design) toward our internal customers (mechanical and optical engineering, and research).

ASML is an exciting company to work for, and the amount of work we do is rapidly expanding as a result of the pandemic and the resulting increase in demand for consumer electronics and computer chips. As a company we are at the forefront of lithography innovation with our EUV machines (Extreme Ultra Violet laser powered).
See this one-minute intro video for instance:

To keep up the pace with the ever increasing demands from our ASML Research and Engineering colleagues, I have been growing the IT teams that report to me. I hired quite a lot of people during the past two years that I have been in the manager seat, and I am now hiring again!
I am also posting here on my blog because it is becoming more challenging every year to find the right people within a reasonable time.

Specifically: I have a job opening for an “IT Infra Automation & Integration Expert“. This job is located at ASML HQ, Veldhoven, The Netherlands. Note that you’d have to move to the Netherlands if you are interested and want to apply.
We are looking for a new colleague in the “SIMS” team of our IT Agile Release Train “Engineering Simulation Services”. This IT ART delivers a Simulation Workplace to our internal customers who are in Mechanical and Optical Engineering as well as Research departments.
See the online profile for all the job details. Feel free to ask below in the comments section about further background info.

Hope this is of interest to someone!
Eric

liveslak-1.3.10 and new ISO images for Slackware Live Edition

The previous batch of ISOs for Slackware Live Edition is already a few months old, so I decided to generate new images.
The ISO files are based on Slackware-current of “Wed Sep 8 18:07:38 UTC 2021” and using the liveslak-1.3.10 scripts, where passwordless login is a new feature.

Slackware-current has the label “15.0 Release Candidate 1” since August 16th but considering the amount of non-trivial updates since that date, I wonder whether the phrase “release candidate” has any relevance here. No sign that we are anywhere nearer to a final 15.0 release.

Let’s hope for the best, and in the meantime fresh ISOs for the Slackware Live Edition can be obtained at download.liveslak.org .

I refreshed he ‘bonus‘ section as well. There you find several squashfs modules you can use with your persistent liveslak USB stick. Copy these module into the ‘addons’ directory on the USB drive. They expand the functionality of the Live OS and allow me to keep the ISO file size within reasonable bounds.
Among these you’ll find the binary nvidia driver (already contained in the CINNAMON, DAW and MATE ISOs by the way); Wine 6.12, multilib, the DAW package collection, and a set from my own repository (chromium, libreoffice, veracrypt, vlc etc).

To end this post, I have a question for you regarding liveslak functionality.
At boot you can add any number of parameters to the kernel commandline, and some of these are used by the liveslak initialization. A subset of these parameters cause modifications of files in the live filesystem. For instance, “livepw=” will update /etc/shadow and /etc/passwd to update the password for the ‘live’ user. You can specify a domain name, custom hostname and a lot more which will cause modifications of files in the live filesystem.
Now the crux of the issue: if you have a persistent Live USB stick, do you want these parameters to make permanent changes to your Live filesystem? Or do you want them to be ignored if you are booting a persistent USB stick?
I can see good reasons for a limitation of the scope of these parameters, to just the non-persistent Slackware Live (i.e. when booting from a DVD). I also realize that it would be a functional change that can impact the way some of you work with a liveslak medium.

Let me know (in the comments section below) if you would like liveslak to ignore certain boot parameters if you boot a persistent medium.

Have fun! Eric

Kernel 5.13 went into Slackware-current; new Live ISOs to celebrate

This week, the Linux 5.13 kernel finally landed in the core distro of Slackware-current after having lived in ‘./testing‘ for a while. Actually it’s the 5.13.2 kernel which had some 800 patches applied compared to 5.13.1.

And with that new 5.13.x kernel series, it looks like a Slackware 15 release is again closer on the horizon.

To celebrate the occasion, I have generated a new batch of ISOs for the Slackware Live Edition. At download.liveslak.org you will find ISO images for the variants based on the latest release of the liveslak scripts (in this case, version 1.3.9.5 of liveslak).
These Live ISOs boot Slackware -current “Thu Jul 15 22:37:59 UTC 2021” with the new 5.13.2 mainline kernel: SLACKWARE (32bit & 64bit), XFCE (32bit & 64bit), CINNAMON, MATE, DAW and LEAN.

The ‘bonus‘ section contains a batch of squashfs modules you can use with your liveslak (copy them into the ‘addons’ directory of your persistent USB drive) if you want to expand the functionality of the Live OS.
Among these you’ll find the binary nvidia driver (already contained in the CINNAMON, DAW and MATE ISOs by the way); the Broadcom STA wireless driver, Wine 6.12, multilib, the DAW package collection, and a set from my own repository (chromium, libreoffice, veracrypt, vlc etc).

Have fun! Eric

How I setup Apache for slackware.nl

Someone asked how I achieved the refreshed look & feel on slackware.nl and download.liveslak.org with the fancier directory listings and a graph of the current network bandwidth usage at the bottom.

It’s not so difficult but if you are new at setting up a web site mainly oriented at content delivery and have not worked with dynamic page generation using server-side includes (SSI), it may be useful to have some kind of reference.

So I decided to write up a short explanation on how I configured Apache httpd for the above two web sites. We’ll just imagine that you want to serve a slackware-current mirror from http://darkstar.home.arpa/slackware/slackware-current/

Bandwidth usage graph

Let’s first look what I did to generate that graph of the network bandwidth usage. Actually I stole the idea from slackware.uk where I noticed it for the first time. I had no idea what kind of tool Tadgy was using there, so I applied my Google-fu and found bwbar, a nifty little program written by H. Peter Anvin. I applied a few patches to the source code and built a Slackware package for it and installed this on my online server.
Next step is to decide where bwbar should write its bandwith usage data so that my Apache webserver can display that data. For the sake of this instruction, let’s assume a completely default unmodified httpd configuration. This means, web content goes into “/srv/httpd/htdocs/”. My customizations will also go into “/srv/httpd/” but I want to keep those files outside the htdocs directory. That’s just me, I want to keep content and presentation separated.
Further down, you will see that I use “Alias” statements in the httpd configuration to bind these directories into the htdocs content area (the so-called DocumentRoot).

I chose “/srv/httpd/pres/” as the location where the web server will find its presentation data. I want the ‘apache’ user to own that directory so that it can write the bwbar output there:

# mkdir /srv/httpd/pres
# chown apache /srv/httpd/pres

Then a commandline added to “/etc/rc.d/rc.local” will start bwbar during boot-up (as the apache user) and make it generate and refresh a graph (ubar.png) and accompanying text (ubar.txt) every 60 seconds:

# Start bandwidth reporting:
/bin/su - apache -s /bin/bash -c "/usr/bin/bwbar \
--output \
--directory /srv/httpd/pres \
--text-file ubar.txt \
--png-file ubar.png \
--width 600 --height 4 --border 1 \
--interval 60 \
--Mbps \
eth0 1000 & "

Once this commandline executes, you’ll notice it starts writing in “/srv/httpd/pres/”. It will keep running in the background and refresh the bandwidth usage data every 60 seconds.

Apache httpd.conf

Apache httpd configuration files are found below “/etc/httpd/”. Again, assuming a completely out-of-the-box installation, the following lines get added to the bottom of “/etc/httpd/httpd.conf”

# Use your own hostname here of course:
ServerName darkstar.home.arpa:80

# Load the module that enables server-side includes (SSI):
LoadModule include_module lib64/httpd/modules/mod_include.so

# We only actually need SSI inside the 'presentation' directory:
<Directory "/srv/httpd/pres/">
    # Make your .html page executable if you want httpd to parse it for SSI:
    XBitHack on
    Options +Includes
</Directory>

# This is where we will host our slackware-current mirror.
# We want every web page there to have a fancy header and footer,
# and the actual directory content inbetween:
<Directory "/srv/httpd/htdocs/slackware/">
    HeaderName /pres/HEADER.html
    ReadmeName /pres/FOOTER.html
</Directory>

# Our CSS files are outside the DocumentRoot so we need to bind them in:
Alias /css/ "/srv/httpd/css/"

<Location /css>
    Options -Indexes
    Require all granted
</Location>

# Our header, footer and bandwidth usage files are outside the DocumentRoot,
# so we need to bind them in:
Alias /pres/ "/srv/httpd/pres/"

<Location /pres>
    Options -Indexes +Includes
    Require all granted
</Location>

# Our icon files are outside the DocumentRoot so we need to bind them in:
Alias /icons/ "/srv/httpd/icons/"

<Directory "/srv/httpd/icons">
    Options Indexes MultiViews
    AllowOverride None
    Require all granted
</Directory>

# And then we add a whole bunch of icons to represent the content we may serve:
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*

AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core

AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^

DefaultIcon /icons/unknown.gif

# Here is where it starts getting interesting.
# This 'IndexOptions' statement will already improve the look and feel of a directory index a lot:
IndexOptions FancyIndexing HTMLTable VersionSort NameWidth=*

# Some stuff we don't want to be visible to our visitors:
IndexIgnore .??* *~ *# HEADER* README.html RCS CVS *,v *,t favicon.ico

# And we want to spice up the index pages with some custom CSS (Cascading Style Sheets):
IndexStyleSheet /css/index.css

# Add a bit of metadata to our index pages to help people find them using online search;
IndexHeadInsert " \
<meta name=\"description\" content=\"Alien BOB's Slackware Linux mirror site.\"> \
<meta name=\"keywords\" content=\"Slackware,Slackware,Slackware Linux,alienBOB,alien\">"

Cascading Style Sheet (CSS)

This is some nice CSS which I found at https://www.apachelounge.com/viewtopic.php?p=21764 . Create a separate css directory to match the httpd.conf snippet above:

# mkdir /srv/httpd/css
# vi /srv/httpd/css/index.css

And add the following content into that index.css file:

body {
    background:#ffffff;
}

table {
    margin:10px auto;
    width:1000px;
    background:#edeeff;
    padding:20px;
    -moz-border-radius: 15px;
    border-radius: 15px;
}
table tr td {
    padding:2px;
}

h1#indextitle {
    margin:20px auto;
    width:990px;
    color:#001133;
    background:#edeeff;
    padding:20px;
    -moz-border-radius: 15px;
    border-radius: 15px;
}

h1#indextitle {
    font-size:20px;
    font-family: "Segoe UI", "Bitstream Vera Sans", "DejaVu Sans", "Bitstream Vera Sans", "Trebuchet MS", Verdana, sans serif;
}

tr.indexhead {
    font-size:16px;
    font-family: "Segoe UI", "Bitstream Vera Sans", "DejaVu Sans", "Bitstream Vera Sans", "Trebuchet MS", Verdana, sans serif;
}
tr.even {
    background:#fffff7; /* */
}
tr.odd {
    background:#edeeff; /* */
}

tr.indexbreakrow th hr {
    border:0;
    height:1px;
    background:black;
}

th.indexcolname {
    text-align:left;
}
th.indexcolname a:link,
th.indexcolname a:visited {
    color:#323B40;
    text-decoration:none;
}
th.indexcolname a:hover {
    color:#a81818;
    text-decoration:none;
}

th.indexcollastmod {
    text-align:center;
}
th.indexcollastmod a:link,
th.indexcollastmod a:visited {
    color:#323B40;
    text-decoration:none;
}
th.indexcollastmod a:hover {
    color:#a81818;text-decoration:none;
}

th.indexcolsize {
    text-align:right;
    padding-right:20px;
}
th.indexcolsize a:link,
th.indexcolsize a:visited {
    color:#323B40;
    text-decoration:none;
}
th.indexcolsize a:hover {
    color:#a81818;
    text-decoration:none;
}

th.indexcoldesc {
    text-align:left;
}
th.indexcoldesc a:link,
th.indexcoldesc a:visited {
    color:#323B40;text-decoration:none;
}
th.indexcoldesc a:hover {
    color:#a81818;
    text-decoration:none;
}

td.indexcolicon {
    text-align:center;
}

td.indexcolname {
    font-family:verdana;
    font-size:14px;
}
td.indexcolname a:link,
td.indexcolname a:visited {
    color:#323B40;
    text-decoration:none;
}
td.indexcolname a:hover {
    color:#a81818;
    text-decoration:none;
}

td.indexcollastmod {
    font-family: "Segoe UI", "Bitstream Vera Sans", "DejaVu Sans", "Bitstream Vera Sans", "Trebuchet MS", Verdana, sans serif;
    font-size:12px;
    text-align:center;
}
td.indexcolsize {
    font-family: "Segoe UI", "Bitstream Vera Sans", "DejaVu Sans", "Bitstream Vera Sans", "Trebuchet MS", Verdana, sans serif;
    font-size:12px;
    text-align:right;
    padding-right:20px;
}
td.indexcoldesc {
    font-family: "Segoe UI", "Bitstream Vera Sans", "DejaVu Sans", "Bitstream Vera Sans", "Trebuchet MS", Verdana, sans serif;
    font-size:12px;
    text-align:left;
    padding-right:20px;
}

Page header and footer

The HTML in the pageheader shows a descriptive text and ensures that the page content is nicely centered in the browser window.

Add the following to “/srv/httpd/pres/HEADER.txt”:

<hr width="100%">
  <center>
    <table>
      <tr>
        <td align="left">
        Welcome to SLACKWARE.NL!<br>
        This mirror service is provided by Alien BOB
        </td>
      </tr>
    </table>

The HTML in the footer uses server side includes, which gives the pages their dynamic nature; when the HTML is parsed, the actual bandwidth usage data is included on the spot.

Add this to “/srv/httpd/pres/FOOTER.html”:

<center>
<br>
<img src="/pres/ubar.png" title="<!--#include virtual='/pres/ubar.txt' -->" alt="<!--#include virtual='/pres/ubar.txt' -->" width=80% height=10 border=0>
<br>
<!--#include virtual="/pres/ubar.txt" -->
</center>

And then make this file executable (!) which tells Apache httpd to parse the HTML for SSI (that’s what that XBitHack statement was for):

# chmod +x /srv/httpd/pres/FOOTER.html

Add content

Create the directory “/srv/httpd/htdocs/slackware” and download a “slackware-current” mirror into that directory.

Tetst your config

The commmand “apachectl configtest” will show you any issues with your httpd.conf that need to be resolved before you can start the web server.

Start the web server

Make the rc script executable so that Apache httpd will start on every boot, and then start it manually this time:

# chmod +x /etc/rc.d/rc.httpd
# /etc/rc.d/rc.httpd start

Finally, go have a look at your new Slackware mirror site at http://darkstar.home.arpa/slackware/slackware-current/ !

Let me know if anything is not clear, or if the file content above was not copied correctly.
Have fun! Eric

Chromium 90 packages – again 32bit related issues

There’s new ‘chromium‘ and ‘chromium-widevine-plugin‘ packages in my repository. And chromium-ungoogled packages will follow soon.

Chromium was upgraded to 90.0.4430.72 but unfortunately the 32bit package which I have built (twice) crashes immediately on startup. This happens both on Slackware 14.2 and on -current. The error message looks like it is something different than the glibc-2.3x related seccomp crash behavior in the previous Chromium 89.x releases.
Since I don’t have hardware that is running a 32bit Slackware OS and could only test on QEMU virtual machines so far, I can not confirm with 100% certainty that the new Chromium will or will not work on your 32bit Slackware OS, which is why I also kept the older 32bit chromium-89.0.4389.114 package in the repository.
Let me know about your experiences down here in the comments section! I am getting tired of begging Google developers not to break 32bit binaries every major release. I’d be grateful if people running 32bit Slackware who are affected by the 32bit Chromium crashes, would chime in. Else I will eventually have to drop 32bit support.

There’s also an updated Widevine plugin package, unfortunately Google only released this newer version for 64bit systems. The new 64bit package has version “4.10.2209.1” whereas the 32bit package remains at version “4.10.1582.2”.
Note that this Widevine plugin is meant for chromium-ungoogled only. The ‘real’ Chromium does not need or use it, since Chromium downloads this CDM library automatically for you.

Have fun!
Eric