Manderius's picture


I've been trying to build an appliance according to TKLDev Tutorial , but I always get errors. I'm using TKLDev 15.0, since the 16.0 version cannot be downloaded (404 - not found).

Appliance is connected to the internet and bootstrap/cdroots/common are downloaded. I tried the following commands with both updating the appliance first and not updating it. After running:

cd /turnkey/fab/products/turnkey/core

I get this:

deck /turnkey/fab/bootstraps/stretch build/bootstrap
fab-apply-overlay /turnkey/fab/common/overlays/bootstrap_apt build/bootstrap;
fab-chroot build/bootstrap "echo nameserver > /etc/resolv.conf";
fab-chroot build/bootstrap "echo nameserver >> /etc/resolv.conf";
fab-chroot build/bootstrap --script /turnkey/fab/common/conf/bootstrap_apt;
tmp/chroot-script.lmzzPC/bootstrap_apt: line 34: gpg: command not found
/usr/share/fab/ recipe for target 'build/stamps/bootstrap' failed
make: *** [build/stamps/bootstrap] Error 127

I managed to build the iso using

/turnkey/buildtasks/bt-iso core

Iso image is built in /mnt/isos and can be booted from. Why does the first option not work?

I also tried building other formats, such as vm (./bt-vm after installing OVFTool) and openstack (./bt-openstack and ./bt-openstack-ami) using the iso I built previously, but they all fail with 

WARNING [bt-vm]: --publish was not specified
INFO [iso-download]: turnkey-core-16.0rc2-buster-amd64.iso already exists, skipping download...
INFO [iso-verify]: turnkey-core-16.0rc2-buster-amd64.iso.hash already exists, skipping download...
INFO [signature-verify]: Verifying GPG signature
WARNING [signature-verify]: /mnt/isos/turnkey-core-16.0rc2-buster-amd64.iso.hash is not signed by GPG - this is expected if building locally and/or the hash file is unsigned.
INFO [signature-verify]: Verifying checksum.
INFO [signature-verify]: Checksum verification success.
# extracting root filesystem and isolinux from ISO
mount: /dev/loop0 is write-protected, mounting read-only
Could not open turnkey-core-16.0rc2-buster-amd64.mount/casper/*root.squashfs, because No such file or directory

I checked contents of the iso file and indeed, casper directory is not there:

root@tkldev /turnkey/buildtasks# ls -la /mnt/my-iso/
dr-xr-xr-x 4 root root 2048 Apr 28 12:20 .
drwxr-xr-x 5 root root 4096 Apr 28 11:08 ..
dr-xr-xr-x 2 root root 2048 Apr 28 12:27 isolinux
dr-xr-xr-x 2 root root 2048 Apr 28 12:27 live

However, if I use a downloaded iso with bt-vm, casper directory exists and I get as far as

WARNING [bt-vm]: --publish was not specified
INFO [iso-download]: turnkey-core-15.0-stretch-amd64.iso already exists, skipping download...
INFO [iso-verify]: turnkey-core-15.0-stretch-amd64.iso.hash already exists, skipping download...
INFO [signature-verify]: Verifying GPG signature
gpg: Signature made Mon Jul 16 12:53:13 2018 UTC
gpg:                using RSA key 694CFF26795A29BAE07B4EB585C25E95A16EB94D
gpg: Good signature from "Turnkey Linux Release Key <>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 694C FF26 795A 29BA E07B  4EB5 85C2 5E95 A16E B94D
INFO [signature-verify]: GPG verification success.
INFO [signature-verify]: Verifying checksum.
INFO [signature-verify]: Checksum verification success.
# extracting root filesystem and isolinux from ISO
mount: /dev/loop0 is write-protected, mounting read-only
Parallel unsquashfs: Using 1 processor
37997 inodes (40426 blocks) to write

[===================================================================================================|] 40426/40426 100%
[===================================================================================================/] 40426/40426 100%
created 34009 files
created 3824 directories
created 3970 symlinks
created 10 devices
created 0 fifos
INFO [purge-pkgs]: Purging packages:  di-live live-boot live-tools live-boot-initramfs-tools
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package 'live-tools' is not installed, so not removed
E: Unable to locate package live-boot
E: Unable to locate package live-boot-initramfs-tools

Some files are produced before the error, but I can't find any .vmdk or .ovf files, as I would expect.

Is there anything I'm doing wrong? I'd love to get the build process working for both iso and other formats so I can focus on further developing.

Thanks in advance

Jeremy Davis's picture

Hi Manderius, we are currently in the process of doing a major version update (i.e. v16.0). Because we build the RC (release candidate) of the new version on the old version, as you've noticed, the old v15.x TKLDev is a bit broken by default.

If you want to build v15.x based apps, then all of the main repos (e.g. common, buildtasks and core) should have v15.x branches and/or tags for you to checkout. If that's what you'd prefer and you hit any issues (or are unsure on using git) then let me know and I'll give you more details.

As you note, the buildtasks 'bt-iso' script works. If you look carefully, you'll note that the version is v16.0RCX. And it works because that's what we use to build the TKLDev and Core RCs. In turn, we then use the RC to build the proper stable release of TKLDev and all other appliances are built on TKLDev v16.0 stable.

Under normal circumstance, as we released both Core and TKLDev as RC (release candidate) about a month ago, I would encourage you to use TKLDev 16.0RC2. However, unfortunately, we had a major issue with our master fileserver a few days ago and lost the RC images... :(

One option would be to build your own TKLDev 16.0RC (actually it'd be closer to the stable that we're soon to release). Then install that to a new VM (I assume that you are using a VM?!) and use that for your development.

As I have actually already built the new (stable) v16.0 TKLDev, (it's not yet published publicly - we plan to publish a batch of ~10 this week; fingers crossed). Unfortunately I can't rush the public publishing as my colleague Alon needs to sign the hash files, and I can't do that. But hopefully he will take care of that really soon.

As a temporary measure, I have uploaded the ISO to my own infrastructure so if you'd rather download that (than build yourself) you don't need to wait. Here's a link:

I did upload the hash file too, but seeing as it's only available via http and Alon hasn't signed it, it's probably better to post the hashes here instead!:

$ sha256sum turnkey-tkldev-16.0-buster-amd64.iso
b7ef5f313bf45b41d6be0d01b033194a1018d52156623f4fa9e4162384db26ca  turnkey-tkldev-16.0-buster-amd64.iso
$ sha512sum turnkey-tkldev-16.0-buster-amd64.iso
ce49f772da9aecd851f2bab6d94926b85e68eec9a03d6ddeb22c1f6fb20ae2e856bc0091a8828c2d8cebe73bdfbb74b63aa547bc19705fb4d38395d6c769d2f0  turnkey-tkldev-16.0-buster-amd64.iso

Regarding the VM builds (i.e. bt-vm) I still haven't finished updating the script for v16.x, but it shoudl be close (and may even work). That's not yet merged into the main TurnKey repo (as you've noticed...) but I have just committed everything that I have and pushed to my GitHub - see it under the 16.0-vm branch.

As for the OpenStack build, I haven't even had a chance to look at that, but I'm hoping it won't require too much work?! We'll see I guess... As I don't have any OpenStack infrastructure myself, perhaps you could even help there?! :)

The blog post notes the changes re casper/live-tools, but to save you digging through that to find the info, we have rebased everything back on default Debian tools (rather than the custom forks of Ubuntu stuff that we had been using since circa 2011).

Out of curiosity, what are you hoping/planning to work on? I'm always excited to hear about what people hope to do with TurnKey! :)

Manderius's picture

Hi, first of all, thank you very much for your reply. The build is now passing successfully, I'll look forward to VM/OpenStack formats in the future. I don't have OpenStack set up just yet, I'll also take a look at other formats that support an easy headless setup.

I really like the philosophy of TKL and I think it could be great for running game servers in a cloud environment. I'd like to make one appliance that can handle various games. There's still a lot of work left to do, but I'd love to publish it to TurnKey Hub once it's finished, if that's alright.

I know the build scripts (VM/OpenStack) are not fully finished yet, but I've noticed they're checking GPG signature of the iso image. Is it possible to convert locally built, unsigned image?


Jeremy Davis's picture

Great to hear that you now have working builds. Hopefully we'll have the stable v16.0 published real soon.

Re a game server, yes that's a great idea! So long as your server only includes open source software and meets our requirements regarding build code, then we'd be happy to add it to the library (including the Hub).

Regarding contributing, there is a basic run through of our desired git workflow on GitHub (someone started updating/improving that ages ago but it never got completed - find that here). The TKLDev docs also include some more detailed info regarding new appliances. I have updated some of the TKLDev docs, but some still need work. Please feel free to ask and/or point out anything more that you hit that isn't right and/or doesn't work. If you have a workaround you'd like to document and/or you would like to assist with improving the docs, it'd be awesome if you opened a PR (pull request) against the TKLDev repo! :)

Re your experience with building the alternate builds, if you build your ISO with buildtasks/bt-iso then this shouldn't be an issue (you should only get a warning, not an error). If you already have your ISO and don't want to rebuild it with buildtasks, then you'll need to rename it appropriately (using our naming convention) and put it where the buildtasks scripts expect it to be (/mnt/isos). Then generate a hash file via the buildtasks/bin/generate-signature script. Alternatively, you could just tweak the specific script to not do the verification.

Please be aware, that the primary purpose of buildtasks is for our internal building purposes. Beyond just being good open source citizens, we provide it publicly so users can assist to improve the alternate builds that we provide and/or add new buildtypes to the existing builds that we provide. Obviously it also allows users such as yourself to build the alternate builds too, but that's more of a bonus than the primary purpose of having it publicly available.

Jeremy Davis's picture

FWIW, I've merged VM buildcode into Buildtasks. So if you pull in the latest Buildtasks commits, then building VMs should now work...

Add new comment