Published: 9/24/2026
I wanted to run a stable non-systemd Linux distribution that I actually know a lot about AND create a custom AMI for work that we can spin up any time that has a number of our tools (such as .NET and nginx) pre-installed.
Slackware is the distribution I know best. It's far more stable than the Ubuntu server we use for our PHP hosting right now. And it doesn't use systemd. At least for now.
I started of reviewing this how-to on Slackware Docs but it lacked a lot of detail. Andrew Sarangan's tutorial was better and got me 90% of the way there. I wanted stable with few regular updates so I skipped the upgrade to Slackware-current. Slackware-current is generally believed to still be highly stable (more stable than many "production" distros) but current gets a LOT of updates regularly, including kernel upgrades.
I followed Andrew's tutorial pretty closely, including using VMware Workstation Pro. I didn't find any issues with lag so I didn't make the vmx customizations that he describes. I also stuck with ELILO instead of switching to GRUB. Your mileage may vary.
/etc/fstab and /boot/efi/EFI/Slackware/elilo.conf/boot/efi/EFI/Slackware directory to /boot/efi/EFI/BOOT or you may get "No bootable device found." from EC2 on boot:
mkdir -p /boot/efi/EFI/BOOT
cp /boot/efi/EFI/Slackware/* /boot/efi/EFI/BOOT/
mv /boot/efi/EFI/BOOT/elilo.efi /boot/efi/EFI/BOOT/BOOTX64.EFI
ls -l /boot/efi/EFI/BOOT/
adduser script)vmimport role if you're re-running this on the same account (such as when updating the AMI).
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ManageTheVmimportRole",
"Effect": "Allow",
"Action": [
"iam:CreateRole",
"iam:DeleteRole",
"iam:PutRolePolicy",
"iam:DeleteRolePolicy",
"iam:GetRole"
],
"Resource": "arn:aws:iam::111122223333:role/vmimport"
},
{
"Sid": "PassTheRoleToVmImportExport",
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::111122223333:role/vmimport"
},
{
"Sid": "RunAndWatchTheImport",
"Effect": "Allow",
"Action": [
"ec2:ImportSnapshot",
"ec2:DescribeImportSnapshotTasks",
"ec2:CancelImportTask",
"ec2:DescribeSnapshots"
],
"Resource": "*"
},
{
"Sid": "StageTheVmdkInS3",
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket",
"s3:GetObject",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::amzn-s3-demo-import-bucket",
"arn:aws:s3:::amzn-s3-demo-import-bucket/*"
]
}
]
}
/root/kernel-install.sh to make it easier on yourself (I added this to the local VM so it's persisted on each new instance automatically):
#!/bin/bash
geninitrd
cp /boot/vmlinuz-generic /boot/efi/EFI/Slackware/vmlinuz
cp /boot/vmlinuz-generic /boot/efi/EFI/BOOT/vmlinuz
cp /boot/initrd.gz /boot/efi/EFI/Slackware/initrd.gz
cp /boot/initrd.gz /boot/efi/EFI/BOOT/initrd.gz
Some other commands it will be helpful to know:
parted /dev/nvme0n1 print):
# parted /dev/nvme0n1 resizepart 3 100%
# resize2fs /dev/nvme0n1p3
Slackpkg blacklist:
kernel-generic.*
kernel-huge.*
kernel-modules.*
kernel-source
# conflicts with SBo version of GO, necessary for docker install
gcc-go-*
# This one will blacklist all SBo packages:
[0-9]+_SBo
1alien
[0-9]+_wsr
e/
f/
kde/
k/
xap/
xfce/
Adam is the lead developer at Manwaring Web Solutions. Programming since the age of 10, he taught himself HTML and basic CSS.