mmdebstrap
is a tool for creating Debian-based system images (root filesystems) in a minimal and efficient manner. It is designed to be simple, fast, and lightweight, making it ideal for creating small, customized system images for containers, virtual machines, or embedded systems. If you frequently use mmdebstrap
to create minimal Debian-based systems, this guide will help you troubleshoot and fix the most common issues you might encounter.
Table of Contents
1. Cannot create /dev/null: Permission denied
Problem:
When running commands like apt update
inside the chroot, you see errors like:
Hit:1 http://deb.debian.org/debian bookworm InRelease Hit:2 http://deb.debian.org/debian bookworm-updates InRelease 0% [Connecting to security.debian.org (2a04:4e42:400::644)]/usr/bin/apt-key: 95: cannot create /dev/null: Permission denied /usr/bin/apt-key: 95: cannot create /dev/null: Permission denied /usr/bin/apt-key: 95: cannot create /dev/null: Permission denied E: gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed Err:1 http://deb.debian.org/debian bookworm InRelease gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed 0% [Waiting for headers]/usr/bin/apt-key: 95: cannot create /dev/null: Permission denied /usr/bin/apt-key: 95: cannot create /dev/null: Permission denied /usr/bin/apt-key: 95: cannot create /dev/null: Permission denied E: gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed Err:2 http://deb.debian.org/debian bookworm-updates InRelease gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed Hit:3 http://security.debian.org/debian-security bookworm-security InRelease 0% [Working]/usr/bin/apt-key: 95: cannot create /dev/null: Permission denied /usr/bin/apt-key: 95: cannot create /dev/null: Permission denied /usr/bin/apt-key: 95: cannot create /dev/null: Permission denied E: gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed Err:3 http://security.debian.org/debian-security bookworm-security InRelease gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed Reading package lists... Done Building dependency tree... Done Reading state information... Done All packages are up to date. W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: http://deb.debian.org/debian bookworm InRelease: gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: http://deb.debian.org/debian bookworm-updates InRelease: gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: http://security.debian.org/debian-security bookworm-security InRelease: gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed W: Failed to fetch http://deb.debian.org/debian/dists/bookworm/InRelease gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed W: Failed to fetch http://deb.debian.org/debian/dists/bookworm-updates/InRelease gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed W: Failed to fetch http://security.debian.org/debian-security/dists/bookworm-security/InRelease gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed W: Some index files failed to download. They have been ignored, or old ones used instead.
Solution:
The chroot environment doesn’t have access to the host’s /dev
directory.
To fix permission Denied for /dev/null
error, exit from the chroot environment and mount the /dev
directory inside the chroot:
sudo mount --bind /dev /path/to/chroot/dev
Replace /path/to/chroot
with the directory where your chroot is located.
Example:
sudo mount --bind /dev ~/debian-chroot/dev/
Why This Works:
The /dev
directory contains device files like /dev/null
, which are essential for many programs. Mounting the host’s /dev
directory gives the chroot access to these files.
2. Missing GPG Tools (gpgv
Not Found)
Problem:
When running apt update
, you see errors like:
gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed
Solution:
Install gpgv
inside the chroot:
sudo chroot /path/to/chroot apt update sudo chroot /path/to/chroot apt install -y gpgv
Why This Works:
apt
uses gpgv
to verify package signatures. Installing it ensures that apt
can securely update and install packages.
3. Repository Verification Errors
Problem:
When running apt update
, you see errors like:
The repository is not signed. Updating from such a repository can't be done securely.
Solution:
This error occurs because gpgv
is missing or the repository keys are not trusted. Follow these steps:
- Install
gpgv
(see Solution 2 above). - Update the package lists:
sudo chroot /path/to/chroot apt update
Why This Works:
gpgv
is required to verify the authenticity of packages. Without it, apt
cannot securely update the package lists.
4. Network Issues Inside the Chroot
Problem:
Commands like apt update
fail with network errors, such as:
Temporary failure resolving 'deb.debian.org'
Solution:
The chroot environment might not have access to the host’s network configuration. To fix this, copy the host’s DNS settings into the chroot:
sudo cp /etc/resolv.conf /path/to/chroot/etc/resolv.conf
Why This Works:
The resolv.conf
file contains DNS settings. Copying it from the host ensures that the chroot can resolve domain names.
5. Missing Essential Packages
Problem:
Basic commands like ls
or bash
don’t work inside the chroot.
Solution:
Install essential packages like coreutils
and bash
:
sudo chroot /path/to/chroot apt update sudo chroot /path/to/chroot apt install -y coreutils bash
Why This Works:
The minimal root filesystem created by mmdebstrap
might not include all essential packages. Installing them ensures that the chroot is functional.
6. Unmounting /dev
After Use
Problem:
After using the chroot, you forget to unmount /dev
, leaving the host’s /dev
directory bound.
Solution:
Always unmount /dev
when you’re done with the chroot:
sudo umount /path/to/chroot/dev
Unmounting /dev
ensures that the host’s /dev
directory is not left in an inconsistent state.
7. Using mmdebstrap
with --include
Problem:
You frequently need to install the same packages (e.g., gpgv
, gnupg
) after creating the chroot.
Solution:
Include these packages during the creation of the root filesystem:
sudo mmdebstrap --variant=minbase --include=gpgv,gnupg stable /path/to/chroot
The --include
option lets you specify additional packages to install during the creation process, saving time and effort.
8. Cleaning Up After Testing
Problem:
The chroot directory takes up disk space, and you forget to delete it after testing.
Solution:
Always delete the chroot directory when you’re done:
sudo rm -rf /path/to/chroot
Deleting the chroot directory frees up disk space and keeps your system clean.
9. Automating the Process (Optional)
Problem:
You frequently create and test chroots and want to automate the process.
Solution:
Write a script to automate the creation, testing, and cleanup of chroots. For example:
#!/bin/bash # Create the chroot sudo mmdebstrap --variant=minbase --include=gpgv,gnupg stable /tmp/debian-rootfs # Mount /dev sudo mount --bind /dev /tmp/debian-rootfs/dev # Test the chroot (optional) sudo chroot /tmp/debian-rootfs apt update # Unmount /dev sudo umount /tmp/debian-rootfs/dev # Delete the chroot sudo rm -rf /tmp/debian-rootfs
Save this script as mmdebstrap-test.sh
, make it executable with chmod +x mmdebstrap-test.sh
, and run it:
./mmdebstrap-test.sh
Conclusion
mmdebstrap
is a powerful tool for creating minimal Debian-based systems, but it can sometimes throw errors. By following this troubleshooting guide, you can quickly resolve common issues and get back to work. Remember to:
- Mount
/dev
inside the chroot. - Install
gpgv
for package verification. - Copy the host’s DNS settings if needed.
- Clean up after testing to free up disk space.
With these tips, you’ll be able to use mmdebstrap
efficiently.