<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="/templates/default/atom.css" type="text/css" ?>

<feed 
   xmlns="http://www.w3.org/2005/Atom"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/">
    
    <link href="http://blog.raymond.burkholder.net/index.php?/feeds/atom10.xml" rel="self" title="Raymond P. Burkholder - Things I Do" type="application/atom+xml" />
    <link href="https://blog.raymond.burkholder.net/"                        rel="alternate"    title="Raymond P. Burkholder - Things I Do" type="text/html" />
    <link href="https://blog.raymond.burkholder.net/rss.php?version=2.0"     rel="alternate"    title="Raymond P. Burkholder - Things I Do" type="application/rss+xml" />
    <title type="html">Raymond P. Burkholder - Things I Do</title>
    <subtitle type="html">In And Around Technology and The Arts</subtitle>
    <icon>https://blog.raymond.burkholder.net/templates/bulletproof/img/s9y_banner_small.png</icon>
    <id>https://blog.raymond.burkholder.net/</id>
    <updated>2026-04-12T03:45:08Z</updated>
    <generator uri="http://www.s9y.org/" version="1.7.2">Serendipity 1.7.2 - http://www.s9y.org/</generator>
    <dc:language>en</dc:language>

    <entry>
        <link href="https://blog.raymond.burkholder.net/index.php?/archives/1335-LXC-Fresh-Container-Construction-From-Scratch-for-Proxmox.html" rel="alternate" title="LXC Fresh Container Construction From Scratch for Proxmox" />
        <author>
            <name>Raymond P. Burkholder</name>
                    </author>
    
        <published>2026-02-27T21:03:19Z</published>
        <updated>2026-04-12T03:45:08Z</updated>
        <wfw:comment>https://blog.raymond.burkholder.net/wfwcomment.php?cid=1335</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.raymond.burkholder.net/rss.php?version=atom1.0&amp;type=comments&amp;cid=1335</wfw:commentRss>
    
            <category scheme="https://blog.raymond.burkholder.net/index.php?/categories/68-Containers" label="Containers" term="Containers" />
            <category scheme="https://blog.raymond.burkholder.net/index.php?/categories/5-Debian" label="Debian" term="Debian" />
            <category scheme="https://blog.raymond.burkholder.net/index.php?/categories/7-LXC" label="LXC" term="LXC" />
            <category scheme="https://blog.raymond.burkholder.net/index.php?/categories/88-Proxmox" label="Proxmox" term="Proxmox" />
    
        <id>https://blog.raymond.burkholder.net/index.php?/archives/1335-guid.html</id>
        <title type="html">LXC Fresh Container Construction From Scratch for Proxmox</title>
        <content type="xhtml" xml:base="https://blog.raymond.burkholder.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>There are many articles available which discuss customizing a pre-existing Proxmox Container Template.  Few, if any, discuss constructing an LXC container from scratch.  Maybe because, fundamentally, a container template is just the rootfs as tarball, so building it is quite easy:

<ul>
  <li>Build a linux based virtual machine, I use Debian's recent release
  <li>Install LXC and its template package
  <li>Construct and initialize an LXC container
  <li>Shut it down and and zip it up
  <li>Copy it over to the ProxMox template directory
  </ul>

<p>The details:

<blockquote><pre>
# build the linux vm - details not relevant here
# ssh into the vm, or start a command line
# install basic packages

sudo apt install --no-install-recommends lxc lxc-templates xz-utils bridge-utils wget debootstrap rsync

# basic container templates are in:
#   /usr/share/lxc/templates/ 
# for debian as well as other distributions

# create an lxc container, provide a list any additional packages

lxc-create --template debian --name trixie-template -- --release trixie --packages iputils-ping,vim-tiny

# start and attach to the container
lxc-start trixie-template
lxc-attach trixie-template

# prepare for generating template
apt clean
apt purge

# Remove SSH host keys to ensure unique keys for each clone:
rm /etc/ssh/ssh_host_*

# Empty the machine ID file:
truncate -s 0 /etc/machine-id

# clear history
unset HISTFILE
# truncate history
history -c
> ~/.bash_history
# the following has a space in front to prevent inclusion in the history
 shutdown -h now

# the shutdown returns to the virtual machine's prompt
# compress the directory structure

cd /var/lib/lxc/trixie-template/

# remove /dev files as they can't be created in an unprivileged container
# an example error message if not removed:
#   tar: ./rootfs/dev/urandom: Cannot mknod: Operation not permitted
# construction of a new container will re-create the directory and files

rm ./rootfs/dev/ptmx
rm ./rootfs/dev/zero
rm ./rootfs/dev/tty3
rm ./rootfs/dev/urandom
rm ./rootfs/dev/null
rm ./rootfs/dev/tty
rm ./rootfs/dev/console
rm ./rootfs/dev/tty4
rm ./rootfs/dev/tty2
rm ./rootfs/dev/random
rm ./rootfs/dev/tty1
rm ./rootfs/dev/full

# cd into rootfs and zip the container

cd rootfs
tar --xz --acls --numeric-owner -cf /var/local/trixie-13-3-template.tar.xz ./

# the xz file can be copied over to proxmox and placed into
# /var/lib/pve/local-btrfs/template/cache/
# for use as a template for container creation
</pre></blockquote>

<p>During the first use of lxc-create to create the original container, packages are downloaded and installed to build the container.
The packages and installation is cached for faster subsequent builds of the same container type.

<p>If the cache becomes stale, it can be rebuilt by using --flush-cache in a manner similar to:

<blockquote><pre>
lxc-create --template debian --name trixie-template -- --release trixie --flush-cache --packages iputils-ping,vim-tiny,less,python-minimal
</pre></blockquote>

<p>An existing cache can be updated with something like:

<blockquote><pre>
sudo chroot /var/cache/lxc/debian/rootfs-trixie-amd64
apt-get update
apt-get dist-upgrade
apt-get clean
exit
</pre></blockquote>

<p>courtesy of <a href="https://www.tomechangosubanana.com/2015/updating-lxc-imagecontainer-caches/" target=_blank>Updating lxc image/container caches</a>

<p>One other note, there are two package candidates for installing the <a href="https://unix.stackexchange.com/questions/400351/what-are-the-differences-between-iputils-ping-and-inetutils-ping" target=_blank>ping utility</a>:

<ul>
  <li><a href="https://packages.debian.org/trixie/iputils-ping" target=_blank>iputils-ping</a> - native Linux ping, preferred for Debian/Linux
  <li><a href="https://packages.debian.org/trixie/inetutils-ping" target=_blank>inetutils-ping</a> - general gnu version, used on a variety of posix sytstems, less preferred
  </ul>

<p>Some fix-ups in the process:

<ul>
  <li>apt-get install less
  <li>dpkg-reconfigure locales
  <li>useradd user
  </ul>

 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="https://blog.raymond.burkholder.net/index.php?/archives/1346-Docker-Installation-In-LXC-on-ProxMox.html" rel="alternate" title="Docker Installation In LXC on ProxMox" />
        <author>
            <name>Raymond P. Burkholder</name>
                    </author>
    
        <published>2026-03-29T17:26:11Z</published>
        <updated>2026-04-12T03:14:15Z</updated>
        <wfw:comment>https://blog.raymond.burkholder.net/wfwcomment.php?cid=1346</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.raymond.burkholder.net/rss.php?version=atom1.0&amp;type=comments&amp;cid=1346</wfw:commentRss>
    
            <category scheme="https://blog.raymond.burkholder.net/index.php?/categories/90-Docker" label="Docker" term="Docker" />
            <category scheme="https://blog.raymond.burkholder.net/index.php?/categories/7-LXC" label="LXC" term="LXC" />
            <category scheme="https://blog.raymond.burkholder.net/index.php?/categories/88-Proxmox" label="Proxmox" term="Proxmox" />
    
        <id>https://blog.raymond.burkholder.net/index.php?/archives/1346-guid.html</id>
        <title type="html">Docker Installation In LXC on ProxMox</title>
        <content type="xhtml" xml:base="https://blog.raymond.burkholder.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>First of all, the obligatory caveat from 2023: <a href="https://forum.proxmox.com/threads/updating-proxmox-breaks-docker-lxc.126720/?ref=benheater.com#post-553701" target=_blank>where Proxmox developers discourage running Docker in LXC</a>.  Upgrades to Proxmox may break 'something', which will require remediation of the containers.  The relationship between Proxmox, LXC and Docker is brittle.

<p>I do totally agree not to install Docker directly on the Proxmox host, as Docker will conflict with many networking and functional operations.

<p>However, the combination of Docker in LXC is just too enticing.  What other mechanism is available to compartmentalize applications and provide GPU resources to each compartmentalized application, particularly when an application is packaged as a Docker container, without recourse for building a native LXC container of the application?  Putting LXC and Docker into a VM seems a bit 'heavy' just for the sake of softening some brittleness.  All the same management has to take place within the VM.

<p>The key benefit is that devices such as one or more GPUs can be passed through to multiple LXC containers plus any nested docker containers. Otherwise, in the scenario where the GPU or PCIe device is passed through to a VM, as far as I know, it has to be dedicated to the VM.  I've read that the devices can not be shared between a VM and LXC containers due to configuration differences between VM pass-through and LXC pass-through.

<p>Given the caveat, I'll see if I can make this work.  Not so easy.  Trying to run
<blockquote><pre>
docker run --rm hello-world
</pre></blockquote>

<p>Yields an error:
<blockquote><pre>
docker: Error response from daemon: failed to mount /tmp/containerd-mount2030888385: 
mount source: "overlay", target: "/tmp/containerd-mount2030888385", 
fstype: overlay, flags: 0, 
data: "
  workdir=/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/3/work,
  upperdir=/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/3/fs,
  lowerdir=/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/2/fs,userxattr", 
  err: permission denied
</pre></blockquote>

<p>With an associated apparmor error in Proxmox:
<blockquote><pre>
audit: type=1400 audit(1774803476.655:145): 
  apparmor="DENIED" operation="mount" class="mount" info="failed perms check" error=-13 
  profile="lxc-131_</var/lib/lxc>" 
  name="/tmp/containerd-mount2030888385/" 
  pid=1480790 comm="dockerd" fstype="overlay" srcname="overlay"
</pre></blockquote>

<p>The simple solution is to set <b>nesting=1</b> in the proxmox lxc options.

<p>The next hurdle is that it may take a couple/several minutes for the Docker file to run when the container starts up.  If so, you may see this:
<blockquote><pre>
> ps aux
root      41  0.0  0.0   2680  1808 ?    Ss   20:09   0:00 /bin/sh /usr/lib/ifupdown/wait-online.sh
</pre></blockquote>

<p>If so, this can be disabled:
<blockquote><pre>
systemctl disable ifupdown-wait-online.service
</pre></blockquote>

<p>In addition, systemd-networkd-wait-online may be waiting for an interface it doesn't manage.  This will cause a startup delay of several minutes.  Use the following to add some debugging and logging
<blockquote><pre>
systemctl edit systemd-networkd-wait-online.service

[Service]
Environment=SYSTEMD_LOG_LEVEL=debug
</pre></blockquote>

<p>In my case, I then saw something like:
<blockquote><pre>
root@frigate01:~# systemctl status systemd-networkd-wait-online.service
● systemd-networkd-wait-online.service - Wait for Network to be Configured

Mar 29 20:38:44 frigate01 systemd-networkd-wait-online[97]: lo: link is ignored
Mar 29 20:38:44 frigate01 systemd-networkd-wait-online[97]: vlan60: link is not managed by networkd.
</pre></blockquote>

<p>I have used a non-standard interface name. I resolved this by updating the edit with the following:
<blockquote><pre>
> systemctl edit systemd-networkd-wait-online.service

[Service]
ExecStart=
ExecStart=/usr/lib/systemd/systemd-networkd-wait-online --interface=vlan60
#Environment=SYSTEMD_LOG_LEVEL=debug
</pre></blockquote>

<p>The empty ExecStart line clears the original command parameters.

<ul>
  <li><a href="https://www.baeldung.com/linux/systemd-networkd-wait-online-service-timeout-solution" target=_blank>How to Fix systemd-networkd-wait-online Service Timing Out During Boot</a>
  <li><a href="https://www.man7.org/linux/man-pages/man8/systemd-networkd-wait-online.8.html" target=_blank>systemd-networkd-wait-online.service(8) — Linux manual page</a>
  <li>
  </ul>

<p>Some Docker commands:
<blockquote><pre>
docker run --rm -it hello-world bash
</pre></blockquote>

 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="https://blog.raymond.burkholder.net/index.php?/archives/1350-JUCE-Audio-Framework.html" rel="alternate" title="JUCE: Audio Framework" />
        <author>
            <name>Raymond P. Burkholder</name>
                    </author>
    
        <published>2026-04-11T03:06:58Z</published>
        <updated>2026-04-11T03:06:58Z</updated>
        <wfw:comment>https://blog.raymond.burkholder.net/wfwcomment.php?cid=1350</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.raymond.burkholder.net/rss.php?version=atom1.0&amp;type=comments&amp;cid=1350</wfw:commentRss>
    
            <category scheme="https://blog.raymond.burkholder.net/index.php?/categories/18-C++" label="C++" term="C++" />
    
        <id>https://blog.raymond.burkholder.net/index.php?/archives/1350-guid.html</id>
        <title type="html">JUCE: Audio Framework</title>
        <content type="xhtml" xml:base="https://blog.raymond.burkholder.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>Note to self: come back to this and redo some non-functional audio logic located in some code which needs to be uprooted and re-juiced.

<p><a href="https://juce.com/" target=_blank>JUCE</a> - open source, cross-platform, software development framework provided as C++ source code, that can be used to create standalone software on Windows, macOS, Linux, iOS and Android, as well as VST, VST3, AU, AUv3, AAX and LV2 plug-ins. 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="https://blog.raymond.burkholder.net/index.php?/archives/1349-Git-Summaries.html" rel="alternate" title="Git Summaries" />
        <author>
            <name>Raymond P. Burkholder</name>
                    </author>
    
        <published>2026-04-11T02:59:21Z</published>
        <updated>2026-04-11T02:59:21Z</updated>
        <wfw:comment>https://blog.raymond.burkholder.net/wfwcomment.php?cid=1349</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.raymond.burkholder.net/rss.php?version=atom1.0&amp;type=comments&amp;cid=1349</wfw:commentRss>
    
            <category scheme="https://blog.raymond.burkholder.net/index.php?/categories/17-Software-Development" label="Software Development" term="Software Development" />
    
        <id>https://blog.raymond.burkholder.net/index.php?/archives/1349-guid.html</id>
        <title type="html">Git Summaries</title>
        <content type="xhtml" xml:base="https://blog.raymond.burkholder.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p><a href="https://piechowski.io/post/git-commands-before-reading-code/" target=_blank>The Git Commands I Run Before Reading Any Code</> - some interesting simple queries on a git repository to gain some understanding on development patterns

<p>Most changed files in the last year:
<blockquote>
git log --format=format: --name-only --since="1 year ago" | sort | uniq -c | sort -nr | head -20
</blockquote>

<p>List of contributors:
<blockquote>
git shortlog -sn --no-merges
</blockquote>

<p>Example of looking for hot words in comment messages:
<blockquote>
git log -i -E --grep="fix|bug|broken" --name-only --format='' | sort | uniq -c | sort -nr | head -20
</blockquote>

<p>Time line of commits:
<blockquote>
git log --format='%ad' --date=format:'%Y-%m' | sort | uniq -c
</blockquote>

<p>Another example of comment keyword searches:
<blockquote>
git log --oneline --since="1 year ago" | grep -iE 'revert|hotfix|emergency|rollback'
</blockquote>

<p><a href="https://news.ycombinator.com/item?id=47687273" target=_blank>Hacker News</a> - referenced 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="https://blog.raymond.burkholder.net/index.php?/archives/1347-Docker-Notes.html" rel="alternate" title="Docker Notes" />
        <author>
            <name>Raymond P. Burkholder</name>
                    </author>
    
        <published>2026-04-05T00:26:37Z</published>
        <updated>2026-04-06T00:40:58Z</updated>
        <wfw:comment>https://blog.raymond.burkholder.net/wfwcomment.php?cid=1347</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.raymond.burkholder.net/rss.php?version=atom1.0&amp;type=comments&amp;cid=1347</wfw:commentRss>
    
            <category scheme="https://blog.raymond.burkholder.net/index.php?/categories/90-Docker" label="Docker" term="Docker" />
    
        <id>https://blog.raymond.burkholder.net/index.php?/archives/1347-guid.html</id>
        <title type="html">Docker Notes</title>
        <content type="xhtml" xml:base="https://blog.raymond.burkholder.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>Images vs Containers
<ul>
  <li>Docker Image: blueprint with app code and dependencies - static, read-only
  <li>Docker Container: running instance of an image - dynamic, executable
  </ul>

<p>Each instruction in the Dockerfile adds an extra layer to the Docker image. Minimize the number of layers by consolidating the instructions to increase the build’s performance and time.

<p>Avoid using multiple RUN commands as it creates multiple cacheable layers which will affect the efficiency of the build process.

<p>Use a single process per container: Each container should run a single process. This makes it easier to manage and monitor containers and helps to keep containers lightweight.

<p>Images can exist without containers, whereas a container needs an image to run. We can create multiple containers from the same image, each with its own unique data and state

<p>Docker commands
<ul>
  <li><b>Docker Run</b>: It used for launching the containers from images, with specifying the runtime options and commands. 
  <li><b>Docker Pull</b>: It fetches the container images from the container registry like Docker Hub to the local machine. 
  <li><b>Docker ps</b>: It helps in displaying the running containers along with their important information like container ID, image used and status. 
  <li><b>Docker Stop</b>: It helps in halting the running containers gracefully shutting down the processes within them. 
  <li><b>Docker Start</b>: It helps in restarting the stopped containers, resuming their operations from the previous state. 
  <li><b>Docker Login</b>: It helps to login in to the docker registry enabling the access to private repositories. 
  </ul>

<p>Docker network commands:
<ul>
  <li>docker network ls
  <li>docker network inspect <id>
  </ul>

<p>Documentation
<ul>
  <li><a href="https://docs.docker.com/reference/dockerfile" target=_blank>Dockerfile reference</a> - <a href="https://www.geeksforgeeks.org/devops/what-is-dockerfile-syntax/" target=_blank>examples</a>
  <li><a href="https://docs.docker.com/build/concepts/dockerfile/" target=_blank>Dockerfile overview</a> - with example
  <li><a href="https://docs.docker.com/engine/cli/completion/" target=_blank>Command Line Completion</a>
  <li><a href="https://docs.docker.com/build/building/base-images/" target=_blank>Base images</a> - includes building from scratch
  <li><a href="https://docs.docker.com/get-started/docker_cheatsheet.pdf" target=_blank>CLI Cheat Sheet</a>
  <li><a href="https://www.geeksforgeeks.org/devops/docker-tutorial/" target=_blank>tutorial</a>
  </ul>
 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="https://blog.raymond.burkholder.net/index.php?/archives/1348-Image-Building-Notes-debootstrap.html" rel="alternate" title="Image Building Notes - debootstrap" />
        <author>
            <name>Raymond P. Burkholder</name>
                    </author>
    
        <published>2026-04-05T17:31:32Z</published>
        <updated>2026-04-05T19:51:12Z</updated>
        <wfw:comment>https://blog.raymond.burkholder.net/wfwcomment.php?cid=1348</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.raymond.burkholder.net/rss.php?version=atom1.0&amp;type=comments&amp;cid=1348</wfw:commentRss>
    
            <category scheme="https://blog.raymond.burkholder.net/index.php?/categories/68-Containers" label="Containers" term="Containers" />
    
        <id>https://blog.raymond.burkholder.net/index.php?/archives/1348-guid.html</id>
        <title type="html">Image Building Notes - debootstrap</title>
        <content type="xhtml" xml:base="https://blog.raymond.burkholder.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>APT based distributions like Debian can be containerized with a tool called <a href="https://packages.debian.org/stable/debootstrap" target=_blank>debootstrap</a>.  It is part of the image build process of lxc-create.  It is also referenced in Docker <a href="https://docs.docker.com/build/building/base-images/" target=_blank>Base Images</a> for building an image from scratch.

<p>When looking at the build scripts included in the package installation, repositories for the following distributions can be found in /usr/share/debootstrap/scripts:

<ul>
  <li><a href="https://www.debian.org/" target=_blank>debian</a> - universal operating system
  <li><a href="https://trisquel.info/" target=_blank>trisquel</a> - a distribution of the GNU operating system, with the kernel GNU <a href="https://www.fsfla.org/ikiwiki/selibre/linux-libre/" _target=_blank>Linux-libre</a>
  <li><a href="https://ubuntu.com/" target=_blank>ubuntu</a> - modern enterprise open source
  <li><a href="https://pardus.org.tr/en" target=_blank>pardus</a> - Turkish 
  <li><a href="https://www.kali.org/" target=_blank>kali</a> - open-source, Debian-based Linux distribution geared towards various information security tasks, such as Penetration Testing, Security Research, Computer Forensics and Reverse Engineering
  <li><a href="https://elxr.org/" target=_blank>elxr</a> - Enterprise-Grade Linux for Edge-to-Cloud Deployments
  <li><a href="https://pureos.net/" target=_blank>pureos</a> - fully-convergent, user friendly, secure and freedom respecting OS for your daily usage  </ul>

<p>The <a href="https://wiki.debian.org/Debootstrap" target=_blank>wiki</a> shows a simple two liner to get the basics of the distribution in place (as root):

<blockquote><pre>
mkdir trixie-chroot
debootstrap stable trixie-chroot http://deb.debian.org/debian/
</pre></blockquote>

<p>Enter the chroot and note new root:

<blockquote><pre>
root@test:~# pwd
/root
root@test:~# chroot trixie/
root@test:/# pwd
/
root@test:/# exit
exit
root@test:~# pwd
/root
</pre></blockquote>

<p>After the debootstrap, create the base for docker, and give it a try:

<blockquote><pre>
tar -C trixie-chroot -c . | docker import - trixie
docker run trixie cat /etc/debian_version
docker run --rm -i -t trixie /bin/bash
</pre></blockquote>

<p>Although debootstrap can be used to build an image for a version subsequent, it is generally recommended to use debootstrap from at least the desired version to ensure it has the proper updates and dependencies.

<p>Command line to summarize the referenced repositories:

<blockquote><pre>
grep -h default_mirror /usr/share/debootstrap/scripts/* \
  | sed 's/default_mirror//' \
  | sed 's/[ \t]//g' \
  | sort \
  | uniq
</pre></blockquote> 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="https://blog.raymond.burkholder.net/index.php?/archives/678-VIM-Key-Strokes-Cheat-Sheet.html" rel="alternate" title="VIM Key Strokes / Cheat Sheet" />
        <author>
            <name>Raymond P. Burkholder</name>
                    </author>
    
        <published>2016-07-17T19:18:48Z</published>
        <updated>2026-04-05T18:57:50Z</updated>
        <wfw:comment>https://blog.raymond.burkholder.net/wfwcomment.php?cid=678</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.raymond.burkholder.net/rss.php?version=atom1.0&amp;type=comments&amp;cid=678</wfw:commentRss>
    
            <category scheme="https://blog.raymond.burkholder.net/index.php?/categories/14-Open-Source" label="Open Source" term="Open Source" />
    
        <id>https://blog.raymond.burkholder.net/index.php?/archives/678-guid.html</id>
        <title type="html">VIM Key Strokes / Cheat Sheet</title>
        <content type="xhtml" xml:base="https://blog.raymond.burkholder.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>Scrolling keys:
<ul>
  <li>j: cursor down
  <li>k: cursor up
  <li>l: cursor right
  <li>h: cursor left
  <li>0 (zero): beginning of line
  <li>$: end of line
  <li>w: word forward
  <li>b: word backward
  <li>H moves the cursor to the top of the screen or viewport.
  <li>M moves the cursor to the middle of the screen or viewport.
  <li>L moves the cursor to the bottom of the screen or viewport.
  <li>ctrl-e: screen and cursor up 1 line
  <li>ctrl-y: screen and cursor down 1 line
  <li>z z: move screen and cursor to mid screen
  <li>z t: move screen and cursor to top line
  <li>z b: move screen and cursor to bottom line
  <li>ctrl-u: screen and cursor up 1/2 page
  <li>ctrl-d: screen and cursor down 1/2 page
  <li>ctrl-b: screen and cursor up one page
  <li>ctrl-f: screen and cursor down one page
  </ul>

<p>Go:
<ul>
  <li>G: last line of file
  <li>nG: nth line of file, with 1 for first line of file
  <li>g-: backwards in edits
  <li>g+: forwards in edits
  <li>:earlier 50s: to back 50 seconds
  <li>:earlier nf: back n file writes
  <li>%: jump to matching bracket
  <li>:help undo-persistence
  </ul>

<p>Select:
<ul>
  <li>shift v: select lines
  <li>ctrl v: select columns
  </ul>

<p>Search:
<ul>
  <li>/: forward search
  <li>?: backwards search
  <li>n: next occurrence
  <li>N: next occurrence, opposite direction
  </ul>\c : append to search to ignore case
  
<p>Change:
<ul>
  <li>cw: change to next word
  <li>cc: change entire line
  <li>c$: delete to end of line, start insert mode
  <li>C: delete to end of line, start insert mode
  <li>ci”: change inside parentheses
  <li>ca”: change around parentheses
  <li>cfx: change until next found occurrence of x
  <li>:%s/search/replace/gc
  </ul>

<p>Delete:
<ul>
  <li>d$ - delete to end of line
  <li>D - delete to end of line
  <li>
  </ul>

<p><a href="https://www.linux.com/news/vim-tips-moving-around-using-marks-and-jumps" target=_blank>Marks</a>:
<ul>
  <li>mx tells Vim to add a mark called x.
  <li>`x tells Vim to return to the line and column for mark x.
  <li>'x tells Vim to return to the beginning of the line where mark x is set.
  <li>`. moves the cursor to the line and column where the last edit was made.
  <li>'. moves the cursor to the line where the last edit was made.
  <li>'" moves the cursor to the last position of the cursor when you exited the previous session.
  <li>:marks shows all marks set.
  <li>:marks x shows the mark named x.
  </ul>

<p>Jumps:
<ul>
  <li>:jumps shows the jumplist.
  <li>Ctrl-o moves the cursor to the last jump.
  <li>Ctrl-i moves the cursor to the previous jump.
  </ul>

<p><a href="http://stackoverflow.com/questions/53664/how-to-effectively-work-with-multiple-files-in-vim" target=_blank>Windows</a>:
<ul>
  <li>ctrl-w s: split horizontally (or :split, :sp)
  <li>ctrl-w v: split vertically (or :vertical split, :vs)
  <li>ctrl-w w: switch between windows
  <li>ctrl-w h, j, k, l: to navigate windows
  <li>ctrl-w _: maximize current window
  <li>ctrl-w =: equal size all windows
  <li>10 ctrl-w +: increase window size by 10 lines
  <li>ctrl-w c: close window
  <li>ctrl-w o: close all windows but current
  <li>:sp &lt;filepath&gt;: split window horizontally with another file
  <li>:vs split window vertically
  </ul>

<p>Tabs:
<ul>
  <li>:tabe &lt;filepath&gt;: open file
  <li>:tabn - next window
  <li>:tabp - previous window
  <li>ctrl-w with arrow: move windows
  <li>gt: jump next tab
  <li>gT: jump previous tab
  <li>&lt;n&gt;gt: jump to specific tab
  <li>:e .: start browsing in tab
  <li>w: next
  <li>W: previous
  <li>&lt;n&gt;gt: index of tab to jump
  </ul>

<p>Column Insertion (full vim needs to be installed, won't work with vim.tiny):

<ul><a href="stackoverflow.com/questions/13701506/vim-quick-column-insert" target=_blank>from stack overflow:</a>
  <li>move to the position
  <li>column visual mode: ctl-v
  <li>select column and row range
  <li>column insert mode: shift-i
  <li>perform insertion
  <li>finish: esc
  </ul>

<p>Scrolling and line numbers in .vimrc file:

<blockquote><pre>
" http://vim.wikia.com/wiki/Keep_your_cursor_centered_vertically_on_the_screen
set scrolloff=5

" http://jeffkreeftmeijer.com/2013/vims-new-hybrid-line-number-mode/
set relativenumber
set number

" http://unix.stackexchange.com/questions/5310/how-can-i-disable-bells-visualbells-in-vim
set visualbell
set t_vb=

</pre></blockquote>

<p>Kind of related, but using 'screen' to split windows (from 
<a href="https://unix.stackexchange.com/questions/7453/how-to-split-the-terminal-into-more-than-one-view#" target=_blank>StackExchange</a>:

<ul>
  <li>split vertically:  ctrl-a, |
  <li>split horizontally: ctrl-a, S
  <li>unsplit: ctrl-a, Q
  <li>switch windows:  ctrl-a, tab
  <li>go to new region: ctrl-a, c
  <li>new terminal (new bash prompt): ctrl-a, c
  <li>next terminal: ctrl-a, space
  <li>nth terminal: ctrl-a, -n-
  <li>switch terminals: ctrl-a, "
  </ul>

<ul>misc
  <li>:set paste - don't insert tabs or spaces during insert
  <li>:set nopaste - opposite of above  <a href="http://vim.wikia.com/wiki/Toggle_auto-indenting_for_code_paste" target=_blank>Auto Indent for code paste</a>
  <li>alternate paste:
    <ul>
      <li>:set noai   - turn off auto indent
      <li>:set ai  - turn on auto indent
      </ul>
  <li>:setl noai nocin nosi inde=   - no auto-indent on current file
  </ul>

<p>Lots of tips, tricks, and techniques at <a href="http://vim.wikia.com/wiki/Vim_Tips_Wiki" target=_blank>vim wikia</a>.

<ul>Other Vim sites:
  <li><a href="https://neovim.io/" target=_blank>neovim</a>: promoted as: "literally the future of vim"
  <li><a href="https://medium.com/@kadek/learning-vim-what-i-wish-i-knew-b5dca186bef7" target=_blank>Learning Vim: What I Wish I Knew</a>
  <li><a href="http://yannesposito.com/Scratch/en/blog/Learn-Vim-Progressively/" target=_blank>Learn Vim Progressively</a>
  <li><a href="http://vimawesome.com/" target=_blank>Awesome Vim Plugins</a>
  <li><a href="https://vim.zeef.com/patrick.schanen" target=_blank>Curated Vim links<a/> at ZEEF Links by Patrick Schanen 
  <li><a href="http://vim.wikia.com/wiki/Example_vimrc" target=_blank>Example vimrc</a>
  <li><a href="https://medium.com/@aswinmohanme/how-vim-killed-atom-and-vscode-723a68ad59dc" target=_blank>How Vim killed Atom and VSCode on my Machine</a>: compares the three and suggests neovim is the future
  <li><a href="http://coderoncode.com/tools/2017/04/16/vim-the-perfect-ide.html" target=_blank>Vim Is The Perfect IDE</a>: has a very large vimrc file as an example, quite sophisticated
  <li><a href="https://justin.abrah.ms/vim/vim_and_python.html" target=_blank>Vim &amp; Python: Making yourself at home</a>: an intro to the .vim file structure for configurations
  <li><a href="https://www.fullstackpython.com/vim.html" target=_blank>Why is Vim a good Python development environment?</a>: a bunch of introductory as well as advanced links on how to make vim more productive, with a key to Python productivity
  <li><a href="http://vimsheet.com/" target=_blank>Vim Cheat Sheet</a>, added 2017/11/14, stark, simple, and to the point
  <li><a href="https://boddy.im/vim-dev-env.html" target=_blank>How I Use Vim</a>, added 2017/11/17, Chris Boddy
  <li><a href="https://blog.browntreelabs.com/base-16-shell-and-why-its-so-awsome/" target=_blank>Matching terminal and vim colors automatically!</a>, added 2017/12/01
  <li><a href="http://blog.simontaranto.com/post/2015-06-05-find-and-replace-in-vim-without-plugins/" target=_blank>Find and Replace in Vim Without Plugins</a>, added 2017/12/14
  <li><a href="https://news.ycombinator.com/item?id=17115008" target=_blank>hacker news</a> - 10 years of vim, added 2018/05/21
  <li><a href="http://michael.peopleofhonoronly.com/vim/" target=_blank>Vim Cheat Sheet for Programmers</a> - color coded and concise
  <li><a href="https://github.com/tpope/vim-sensible" target=_blank>tpope/vim-sensible</a> - sensible.vim: Defaults everyone can agree on  - added 2019/12/23
  <li><a href="https://cmake.org/Wiki/VIM_Useful_Commands" target=_blank>VIM Useful Commands</a> - from cmake.org - added 2019/12/23
  <li><a href="https://gist.github.com/dendisuhubdy/2ee61150020284f96c1e880728d0f662" target=_blank>.vimrc</a> - added 2020/01/17 - many many plugins listed
  <li><a href="https://thevaluable.dev/vim-intermediate/" target=_blank>Vim Guide for Intermediate Users</a> - added 2020/12/28 - 
  <li><a href="https://learnvim.irian.to/" target=_blank>Learn Vim the Smart Way</a> - added 2021/05/19
  </ul>

 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="https://blog.raymond.burkholder.net/index.php?/archives/1343-NVidia-GPU-Passthrough-to-ProxMox-LXC-Container.html" rel="alternate" title="NVidia GPU Passthrough to ProxMox LXC Container" />
        <author>
            <name>Raymond P. Burkholder</name>
                    </author>
    
        <published>2026-03-28T17:26:45Z</published>
        <updated>2026-03-29T17:08:20Z</updated>
        <wfw:comment>https://blog.raymond.burkholder.net/wfwcomment.php?cid=1343</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.raymond.burkholder.net/rss.php?version=atom1.0&amp;type=comments&amp;cid=1343</wfw:commentRss>
    
            <category scheme="https://blog.raymond.burkholder.net/index.php?/categories/88-Proxmox" label="Proxmox" term="Proxmox" />
    
        <id>https://blog.raymond.burkholder.net/index.php?/archives/1343-guid.html</id>
        <title type="html">NVidia GPU Passthrough to ProxMox LXC Container</title>
        <content type="xhtml" xml:base="https://blog.raymond.burkholder.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p><a href="https://www.virtualizationhowto.com/2025/05/how-to-enable-gpu-passthrough-to-lxc-containers-in-proxmox/" target=_blank>How to Enable GPU Passthrough to LXC Containers in Proxmox</a> indicates that the process of providing passthrough of a GPU to both an LXC container as well as a Virtual Machine is not possible as the two types of configurations conflict with each other.

<p>As my own preference is to run whatever possible in LXC containers, I'll summarize the configuration I used, which is an amalgamation of configurations from several sites.
<p>My current installation is ProxMox v9.1.6 with:

<ul>
  <li>ProArt Z890-CREATOR WIFI
  <li>Intel(R) Core(TM) Ultra 9 285K
  <li>Corsair CMP64GX5M2X6600C32 (128G  4400 MT/s) - ECC would have been nice
  <li>NVIDIA Corporation AD103 [GeForce RTX 4070] (rev a1)
  </ul>

<p>In BIOS/UEFI, enable these:
<ul>
  <li>VT-d / IOMMU
  <li>Above 4G Decoding
  <li>PCIe Native Power Management (if available)
  </ul>

<p>Proxmox kernel parameters:
<blockquote><pre>
# /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream,multifunction"

update-grub
reboot
</pre></blockquote>

<p><a href="https://www.kernel.org/doc/html/latest/driver-api/vfio.html" target=_blank>VFIO Binding</a> - optional but recommended:
<blockquote><pre>
# /etc/modprobe.d/vfio.conf
options vfio_iommu_type1 allow_unsafe_interrupts=1
</pre></blockquote>

<p>Obtain Linux drivers from <a href="https://www.nvidia.com/en-us/drivers/" target=_blank>NVidia</a>.  The CUDA toolkit is not required.  Only the drivers are required in ProxMox.  Toolkits and add-ons are added within the container.

<p>Install the drivers:
<blockquote><pre>
apt install build-essential
apt install pve-headers-$(uname -r)
sh NVIDIA-Linux-x86_64-595.58.03.run
# note, use the open kernel, rather than proprietary
</pre></blockquote>

<p>Blacklist nouveau:
<blockquote><pre>
cat > /etc/modprobe.d/blacklist-nouveau.conf << EOF
blacklist nouveau
options nouveau modeset=0
EOF
</pre></blockquote>

<p>Test that the card is accessible:
<blockquote><pre>
nvidia-smi
</pre></blockquote>

<p>Enable <a href="https://docs.nvidia.com/deploy/driver-persistence/data-persistence.html" target=_blank>Data Persistence</a> to prevent the GPU from re-initializing with each use.
<blockquote><pre>
nvidia-persistenced --persistence-mode
systemctl enable nvidia-persistenced
</pre></blockquote>

<p>Then restart:
<blockquote><pre>
reboot
</pre></blockquote>

<p>Identify the nvidia devices requiring passthrough:
<blockquote><pre>
root@host02:~# ls -al /dev/nvidia*
crw-rw-rw- 1 root root 195,   0 Mar 28 11:58 /dev/nvidia0
crw-rw-rw- 1 root root 195, 255 Mar 28 11:58 /dev/nvidiactl
crw-rw-rw- 1 root root 505,   0 Mar 28 11:58 /dev/nvidia-uvm
crw-rw-rw- 1 root root 505,   1 Mar 28 11:58 /dev/nvidia-uvm-tools

/dev/nvidia-caps:
total 0
drwxr-xr-x  2 root root     80 Mar 28 11:58 .
drwxr-xr-x 21 root root   5060 Mar 28 11:58 ..
cr--------  1 root root 508, 1 Mar 28 11:58 nvidia-cap1
cr--r--r--  1 root root 508, 2 Mar 28 11:58 nvidia-cap2
</pre></blockquote>

<p>Note the numbers 195, 505 and 508 in this list (yours may be different).

<p>Construct a container, and prior to starting, place the following into /etc/pve/lxc/&lt;vmid&gt;.conf (based upon the device listing above):
<blockquote><pre>
dev0: /dev/nvidia0
dev1: /dev/nvidiactl
dev2: /dev/nvidia-modeset
dev3: /dev/nvidia-uvm
dev4: /dev/nvidia-uvm-tools
dev5: /dev/nvidia-caps/nvidia-cap1
dev6: /dev/nvidia-caps/nvidia-cap2
</pre></blockquote>

<p>These lines are optional in the config file, one site talks about them by my container seems to work without them  (they may be an old style cgroup2 style passthrough rather than the device oriented passthrough above):
<blockquote><pre>
lxc.cgroup2.devices.allow: c 195:* rwm
lxc.cgroup2.devices.allow: c 505:* rwm
lxc.cgroup2.devices.allow: c 508:* rwm
</pre></blockquote>


<p>Start the container and push the driver file into the container:
<blockquote><pre>
pct push &lt;vmid&gt; downloads/NVIDIA-Linux-x86_64-595.58.03.run /root/NVIDIA-Linux-x86_64-595.58.03.run
</pre></blockquote>

<p>In the container, install the driver, minus the kernel module:
<blockquote><pre>
apt install kmod
sh NVIDIA-Linux-x86_64-595.58.03.run --no-kernel-modules
</pre></blockquote>

<p>Run nvidia-smi in the container to confirm the card is reachable.

<p>Add nvtop at the host or the container level to chart live GPU utllization:
<blockquote><pre>
apt install nvtop
</pre></blockquote>


<p>Additional resources:
<ul>
  <li><a href="https://www.reddit.com/r/Proxmox/comments/1s629rq/complete_gpu_passthrough_guide_for_ai_workloads_t/" target=_blank>Complete GPU passthrough guide for AI workloads, avoid the mistakes I made so you don't have to </a>
  <li><a href="https://forum.proxmox.com/threads/nvidia-drivers-instalation-proxmox-and-ct.156421/" target=_blank>[TUTORIAL] NVIDIA drivers instalation Proxmox and CT</a>
  <li><a href="https://www.virtualizationhowto.com/2025/05/how-to-enable-gpu-passthrough-to-lxc-containers-in-proxmox/" target=_blank>How to Enable GPU Passthrough to LXC Containers in Proxmox</a> - contains ollama startup examples with OpenWebUI
  </ul>

<p>Another type of test to run when pytorch is installed:
<blockquote><pre>
python -c "import torch; print(torch.cuda.is_available())"
</pre></blockquote>
 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="https://blog.raymond.burkholder.net/index.php?/archives/1345-Docker-Installation.html" rel="alternate" title="Docker Installation" />
        <author>
            <name>Raymond P. Burkholder</name>
                    </author>
    
        <published>2026-03-29T15:32:27Z</published>
        <updated>2026-03-29T15:32:27Z</updated>
        <wfw:comment>https://blog.raymond.burkholder.net/wfwcomment.php?cid=1345</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.raymond.burkholder.net/rss.php?version=atom1.0&amp;type=comments&amp;cid=1345</wfw:commentRss>
    
            <category scheme="https://blog.raymond.burkholder.net/index.php?/categories/7-LXC" label="LXC" term="LXC" />
    
        <id>https://blog.raymond.burkholder.net/index.php?/archives/1345-guid.html</id>
        <title type="html">Docker Installation</title>
        <content type="xhtml" xml:base="https://blog.raymond.burkholder.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>Docker installation is easy enough:

<blockquote><pre>
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
</pre></blockquote>

<p>This installs the latest stable release of:

<ul>
  <li>Docker CLI, 
  <li>Docker Engine,
  <li>Docker Buildx, 
  <li>Docker Compose, 
  <li>containerd, and 
  <li>runc.
  </ul>

<p>To get an idea of usage:

<blockquote><pre>
sh -c docker version
</pre></blockquote>
 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="https://blog.raymond.burkholder.net/index.php?/archives/1344-Some-Local-Aspects-of-AI.html" rel="alternate" title="Some Local Aspects of AI" />
        <author>
            <name>Raymond P. Burkholder</name>
                    </author>
    
        <published>2026-03-29T04:25:51Z</published>
        <updated>2026-03-29T05:00:22Z</updated>
        <wfw:comment>https://blog.raymond.burkholder.net/wfwcomment.php?cid=1344</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.raymond.burkholder.net/rss.php?version=atom1.0&amp;type=comments&amp;cid=1344</wfw:commentRss>
    
            <category scheme="https://blog.raymond.burkholder.net/index.php?/categories/50-Technology" label="Technology" term="Technology" />
    
        <id>https://blog.raymond.burkholder.net/index.php?/archives/1344-guid.html</id>
        <title type="html">Some Local Aspects of AI</title>
        <content type="xhtml" xml:base="https://blog.raymond.burkholder.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <ul>
  <li><a href="https://ollama.com/" target=_blank>ollama</a> - framework for running models
  <li><a href="https://pytorch.org/get-started/locally/" target=_blank>PyTorch Installation</a>
  <li><a href="https://huggingface.co/" target=_blank>Hugging Face</a> - models 
  <li><a href="https://docs.openwebui.com/" target=_blank>Open WebUI</a> -  extensible, feature-rich, and user-friendly self-hosted AI platform designed to operate entirely offline. It is built around universal standards, supporting Ollama and OpenAI-compatible Protocols (specifically Chat Completions).
  </ul> 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="https://blog.raymond.burkholder.net/index.php?/archives/1342-LibreOffice-locking-up-when-using-FileOpenSave-Dialog.html" rel="alternate" title="LibreOffice locking up when using File/Open/Save Dialog" />
        <author>
            <name>Raymond P. Burkholder</name>
                    </author>
    
        <published>2026-03-27T01:02:06Z</published>
        <updated>2026-03-27T01:02:06Z</updated>
        <wfw:comment>https://blog.raymond.burkholder.net/wfwcomment.php?cid=1342</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.raymond.burkholder.net/rss.php?version=atom1.0&amp;type=comments&amp;cid=1342</wfw:commentRss>
    
            <category scheme="https://blog.raymond.burkholder.net/index.php?/categories/14-Open-Source" label="Open Source" term="Open Source" />
    
        <id>https://blog.raymond.burkholder.net/index.php?/archives/1342-guid.html</id>
        <title type="html">LibreOffice locking up when using File/Open/Save Dialog</title>
        <content type="xhtml" xml:base="https://blog.raymond.burkholder.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>Some say this happens due to Wayland usage.  My usage is Wayland/X11, not that it may make a difference.  It is that way because I like that fact that the windows of an application get placed back to where they were when the application is re-opened.

<p>The solution appears to be:
<blockquote>
Tools -> Options -> General -> Enable 'Use LibreOffice dialogs'
</blockquote> 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="https://blog.raymond.burkholder.net/index.php?/archives/1341-Debian-Linux-Network-Configuration-Tools.html" rel="alternate" title="Debian Linux Network Configuration Tools" />
        <author>
            <name>Raymond P. Burkholder</name>
                    </author>
    
        <published>2026-03-22T15:06:04Z</published>
        <updated>2026-03-22T15:24:52Z</updated>
        <wfw:comment>https://blog.raymond.burkholder.net/wfwcomment.php?cid=1341</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.raymond.burkholder.net/rss.php?version=atom1.0&amp;type=comments&amp;cid=1341</wfw:commentRss>
    
            <category scheme="https://blog.raymond.burkholder.net/index.php?/categories/67-Networks" label="Networks" term="Networks" />
    
        <id>https://blog.raymond.burkholder.net/index.php?/archives/1341-guid.html</id>
        <title type="html">Debian Linux Network Configuration Tools</title>
        <content type="xhtml" xml:base="https://blog.raymond.burkholder.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>In the Nanog email list, the following was posted as a summary of current tooling use for network management in Debian:

<blockquote>
<p>Linux has a bunch of different possible ways to administer all of this stuff.

<ul>
  <li>The most comprehensive CLI mechanism is <a href="https://packages.debian.org/trixie/iproute2" target=_blank>iproute2</a> (the “ip” command and some related constructs).
  <li>The most comprehensive and capable persistent configuration database mechanism is <a href="https://wiki.debian.org/SystemdNetworkd" target=_blank>systemd-networkd</a>.
  </ul>

<p>Other <a href="https://www.debian.org/doc/manuals/debian-reference/ch05.en.html#_the_modern_network_configuration_without_gui" target=_blank>persistent mechanisms</a> include:
<ul>
  <li><a href="https://packages.debian.org/trixie/netplan.io" target=_blank>Netplan</a> (YAML based configurations that now days mostly get parsed into systemd-networkd files and then executed).
  <li>Debian Traditional (the /etc/network/interfaces file and/or interfaces.d directory, ifup/ifdown/etc.).  
	Lacks many features, but most can be worked around with iproute2 shell commands added to triggers in the file.
  <li>Debian Traditional can be supplemented with <a href="https://packages.debian.org/trixie/ifupdown2" target=_blank>ifupdown2</a> - ifupdown replacement from Cumulus Networks
  <li><a href="https://packages.debian.org/trixie/network-manager" target=_blank>NetworkManager</a> (semi-capable, but any capabilities it lacks are just hard to cope with).
  </ul>

<p>My strong recommendation is take the time to learn systemd-networkd and use it. It’s a bit of a pain and some of the syntax can be arcane and frustrating. It’s also annoying the way it dithers the configuration for a given interface across a multitude of files in some cases. However, when I think the obvious corner cases through and consider the alternatives, I usually find myself realizing that they’ve probably made as good a choice as any for what needs to be done.

<p>Overall, it’s a pretty comprehensive interface and provides good logs for troubleshooting in most circumstances.
</blockquote>
 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="https://blog.raymond.burkholder.net/index.php?/archives/1340-lxc-create-of-debian-testing-on-debian-trixie.html" rel="alternate" title="lxc-create of debian testing on debian trixie" />
        <author>
            <name>Raymond P. Burkholder</name>
                    </author>
    
        <published>2026-03-17T03:10:34Z</published>
        <updated>2026-03-17T03:10:34Z</updated>
        <wfw:comment>https://blog.raymond.burkholder.net/wfwcomment.php?cid=1340</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.raymond.burkholder.net/rss.php?version=atom1.0&amp;type=comments&amp;cid=1340</wfw:commentRss>
    
            <category scheme="https://blog.raymond.burkholder.net/index.php?/categories/5-Debian" label="Debian" term="Debian" />
            <category scheme="https://blog.raymond.burkholder.net/index.php?/categories/7-LXC" label="LXC" term="LXC" />
    
        <id>https://blog.raymond.burkholder.net/index.php?/archives/1340-guid.html</id>
        <title type="html">lxc-create of debian testing on debian trixie</title>
        <content type="xhtml" xml:base="https://blog.raymond.burkholder.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>When creating a Debian testing/forky LXC container on a Debian trixie machine, the following error may be encountered in the output:

<blockquote><pre>
I: Resolving dependencies of required packages...
I: Resolving dependencies of base packages...
I: Checking component main on http://deb.debian.org/debian...
E: Couldn't find these debs: isc-dhcp-client
Failed to download the rootfs, aborting.
Failed to download 'debian base'
failed to install debian
</pre></blockquote>

<p>This is a result of <a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1125011" target=_blank>bug #1125011</a> in the Debian bug tracker.

<p>There are several possible solutions:
<ul>
  <li>Manually apply the patches supplied by the <a href="https://salsa.debian.org/lxc-team/lxc-templates/-/merge_requests/5/commits" target=_blank>Debian LXC team</a>
  <li>Probably might be solved by running lxc-create on a testing/forky machine, where the solution may have already been applied - I have not confirmed this
  <li>Or it may work on a sid machine
  </ul> 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="https://blog.raymond.burkholder.net/index.php?/archives/1337-Python-Virtual-Environment-for-Ansible.html" rel="alternate" title="Python Virtual Environment for Ansible" />
        <author>
            <name>Raymond P. Burkholder</name>
                    </author>
    
        <published>2026-02-28T19:27:47Z</published>
        <updated>2026-03-16T02:58:05Z</updated>
        <wfw:comment>https://blog.raymond.burkholder.net/wfwcomment.php?cid=1337</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.raymond.burkholder.net/rss.php?version=atom1.0&amp;type=comments&amp;cid=1337</wfw:commentRss>
    
            <category scheme="https://blog.raymond.burkholder.net/index.php?/categories/89-Ansible" label="Ansible" term="Ansible" />
            <category scheme="https://blog.raymond.burkholder.net/index.php?/categories/63-Python" label="Python" term="Python" />
    
        <id>https://blog.raymond.burkholder.net/index.php?/archives/1337-guid.html</id>
        <title type="html">Python Virtual Environment for Ansible</title>
        <content type="xhtml" xml:base="https://blog.raymond.burkholder.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p><a href="https://codesolid.com/pip-vs-pipenv-which-is-better-and-which-to-learn-first/" target=_blank>Pip vs Pipenv: Which is better and which to learn first</a> compares <a href="https://packages.debian.org/trixie/pipenv" target=_blank>pipenv</a> vs the <a href="https://packages.debian.org/trixie/python3-pip" target=_blank>python3-pip</a> and <a href="https://packages.debian.org/trixie/virtualenv" target=_blank>virtualenv</a> package combo.

<p>After referring to that, I think I'll just stick with the standard pip/virtualenv combo for now.

<p>To get started:

<blockquote><pre>
# install basic packages
apt-get install python3 python3-pip virtualenv  python3-venv git

# create a project directory - example ansible
python3 -m venv ansible

# activate the project
cd ansible
source bin/activate

# example installation of packages
pip install ansible
pip install argcomplete
activate-global-python-argcomplete
source ~/.bash_completion
ansible-config init --disabled > ansible.cfg

# to deactivate the project
deactivate

# upgrade
python3 -m pip install --upgrade ansible
</pre></blockquote>

<p>At some point, integrate <a href="https://packages.debian.org/trixie/python3-ansible-runner" target=_blank>python3-ansible-runner</a>, the <a href="https://github.com/ansible/ansible-runner" target=_blank>github source</a> and links to documentation. 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="https://blog.raymond.burkholder.net/index.php?/archives/1339-Opening-ProxMox-.vv-files-with-virt-viewer-Debian-Firefox.html" rel="alternate" title="Opening ProxMox .vv files with virt-viewer (Debian &amp; Firefox) " />
        <author>
            <name>Raymond P. Burkholder</name>
                    </author>
    
        <published>2026-03-14T22:54:52Z</published>
        <updated>2026-03-14T22:54:52Z</updated>
        <wfw:comment>https://blog.raymond.burkholder.net/wfwcomment.php?cid=1339</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.raymond.burkholder.net/rss.php?version=atom1.0&amp;type=comments&amp;cid=1339</wfw:commentRss>
    
            <category scheme="https://blog.raymond.burkholder.net/index.php?/categories/88-Proxmox" label="Proxmox" term="Proxmox" />
    
        <id>https://blog.raymond.burkholder.net/index.php?/archives/1339-guid.html</id>
        <title type="html">Opening ProxMox .vv files with virt-viewer (Debian &amp; Firefox) </title>
        <content type="xhtml" xml:base="https://blog.raymond.burkholder.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>If running Firefox on a Debian Linux machine, install virt-viewer:

<blockquote><pre>
sudo apt install virt-viewer
</pre></blockquote>

<p>Ensure the VirtIO drivers and such have been installed in the virtual machine (<a href="https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/?C=M;O=D" target=_blank>if Windows</a>) in order to provide SPICE services.

<p>Then, in Firefox on your workstation:

<ul>
  <li>go into about:config, and add the key 'network.protocol-handler.expose.virt-viewer' as boolean and set to true
  <li>go into about:preferences, and set "What should Firefox do with other files" to "Ask whether to open or save files".
  <li>in Proxmox, open a SPICE based console for a virtual machine, which attempts a download or a run of a customized .vv file,
  <li>Firefox will then request to open a Virt-Viewer file with Remote Viewer - at this point, you can set it as the default viewer, and it will show up in the application preferences 
  </ul>
 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="https://blog.raymond.burkholder.net/index.php?/archives/1338-apparmorDENIED-operationmount-classmount-infofailed-perms-check-error-13.html" rel="alternate" title="apparmor=&quot;DENIED&quot; operation=&quot;mount&quot; class=&quot;mount&quot; info=&quot;failed perms check&quot; error=-13 " />
        <author>
            <name>Raymond P. Burkholder</name>
                    </author>
    
        <published>2026-02-28T23:51:54Z</published>
        <updated>2026-03-03T02:43:19Z</updated>
        <wfw:comment>https://blog.raymond.burkholder.net/wfwcomment.php?cid=1338</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.raymond.burkholder.net/rss.php?version=atom1.0&amp;type=comments&amp;cid=1338</wfw:commentRss>
    
            <category scheme="https://blog.raymond.burkholder.net/index.php?/categories/5-Debian" label="Debian" term="Debian" />
            <category scheme="https://blog.raymond.burkholder.net/index.php?/categories/7-LXC" label="LXC" term="LXC" />
            <category scheme="https://blog.raymond.burkholder.net/index.php?/categories/88-Proxmox" label="Proxmox" term="Proxmox" />
    
        <id>https://blog.raymond.burkholder.net/index.php?/archives/1338-guid.html</id>
        <title type="html">apparmor=&quot;DENIED&quot; operation=&quot;mount&quot; class=&quot;mount&quot; info=&quot;failed perms check&quot; error=-13 </title>
        <content type="xhtml" xml:base="https://blog.raymond.burkholder.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>After following my own instructions for building my own LXC container template for ProxMox using the SID release, when the container started, the ProxMox logs would fill up with errors along the lines of:

<blockquote><pre>
apparmor="DENIED" operation="mount" class="mount" info="failed flags match" error=-13 name="/run/credentials/systemd-journald.service/" flags="rw, move"
</pre></blockquote>

<p>My Trixie template did not seem to offer up these types of errors.  LXC containers were created with the 'Unpriviledged Container" setting to 1|yes.

<p>Instead of going the last resort brute force and ignorance route of using the following configuration (see <a href="https://github.com/russmorefield/lxc-docker-fix" target=_blank>Fixing net.ipv4.ip_unprivileged_port_start and AppArmor Docker Errors in a Proxmox LXC</a> for some background):

<blockquote><pre>
lxc.apparmor.profile: unconfined
features: keyctl=1,nesting=1
</pre></blockquote>

<p>I took a more nuanced/detailed approach.  <a href="https://bobcares.com/blog/apparmor-denied-operation-mount-info-failed-flags-match-error-13/" target=_blank>AppArmor Denied Operation mount info failed flags match Error 13</a> provided a starting point for developing a solution.

<p>After incrementally adding rules as new Apparmor DENIED statements occurred, this is the rule set which seems to resolve the errors.  Once the container is created, these are the rules I add to the end of /etc/pve/lxc/&lt;vmid&gt;.conf:

<blockquote><pre>
lxc.apparmor.raw: mount options=(rw,move) -> /run/credentials/{,**},
lxc.apparmor.raw: mount options=(ro, remount, noatime, bind) -> /,
lxc.apparmor.raw: mount options=(ro, remount, bind) -> /dev/,
lxc.apparmor.raw: mount options=(rw, move) -> /dev/mqueue/,
lxc.apparmor.raw: mount options=(rw, move) -> /tmp/,
lxc.apparmor.raw: mount options=(rw, move) -> /run/systemd/mount-rootfs/proc/,
lxc.apparmor.raw: mount options=(ro, nosuid, nodev, noexec, remount, nosymfollow, bind) -> /run/systemd/mount-rootfs/run/credentials/systemd-networkd.service/,
lxc.apparmor.raw: mount options=(rw, nosuid, nodev, noexec, remount, bind) -> /run/systemd/mount-rootfs/proc/sys/net/,
lxc.apparmor.raw: mount options=(rw, nosuid, nodev, noexec, remount, bind) -> /run/systemd/mount-rootfs/proc/uptime,
lxc.apparmor.raw: mount options=(rw, nosuid, nodev, noexec, remount, bind) -> /run/systemd/mount-rootfs/proc/slabinfo,
lxc.apparmor.raw: mount options=(rw, nosuid, nodev, noexec, remount, bind) -> /run/systemd/mount-rootfs/proc/meminfo,
lxc.apparmor.raw: mount options=(rw, nosuid, nodev, noexec, remount, bind) -> /run/systemd/mount-rootfs/proc/swaps,
lxc.apparmor.raw: mount options=(rw, nosuid, nodev, noexec, remount, bind) -> /run/systemd/mount-rootfs/proc/loadavg,
lxc.apparmor.raw: mount options=(rw, nosuid, nodev, noexec, remount, bind) -> /run/systemd/mount-rootfs/proc/cpuinfo,
lxc.apparmor.raw: mount options=(rw, nosuid, nodev, noexec, remount, bind) -> /run/systemd/mount-rootfs/proc/diskstats,
lxc.apparmor.raw: mount options=(rw, nosuid, nodev, noexec, remount, bind) -> /run/systemd/mount-rootfs/proc/,
lxc.apparmor.raw: mount options=(rw, nosuid, nodev, noexec, remount, bind) -> /run/systemd/mount-rootfs/proc/stat,
lxc.apparmor.raw: userns create,
</pre></blockquote>

<p>Restart the container, and the errors should no longer occur.

<p>Don't try to place statements in /var/lib/lxc/&lt;vmid&gt;/config as it is over-written by ProxMox upon container startup.  Rules are appended to that configuration.

<p>I used the following for a trixie v13.3 version of a container:

<blockquote><pre>
lxc.apparmor.raw: mount fstype=ramfs -> /dev/shm/,
lxc.apparmor.raw: mount options=(ro, nosuid, nodev, noexec, remount, nosymfollow, bind) -> /dev/shm/,
lxc.apparmor.raw: mount options=(ro, remount, bind) -> /dev/,
lxc.apparmor.raw: mount options=(rw, move) -> /dev/mqueue/,
lxc.apparmor.raw: mount options=(rw, move) -> /run/lock/,
lxc.apparmor.raw: mount options=(rw, move) -> /tmp/,
lxc.apparmor.raw: mount options=(ro, remount, noatime, bind) -> /,
lxc.apparmor.raw: mount options=(ro, nosuid, nodev, noexec, remount, nosymfollow, bind) -> /run/systemd/mount-rootfs/run/credentials/systemd-networkd.service/,
lxc.apparmor.raw: userns create,
lxc.apparmor.raw: mount options=(rw, nosuid, nodev, noexec) -> /run/systemd/namespace-{,**},
lxc.apparmor.raw: mount options=(rw, nosuid, nodev, noexec, remount, bind) -> /run/systemd/mount-rootfs/proc/sys/net/,
lxc.apparmor.raw: mount options=(rw, nosuid, nodev, noexec, remount, bind) -> /run/systemd/mount-rootfs/proc/uptime,
lxc.apparmor.raw: mount options=(rw, nosuid, nodev, noexec, remount, bind) -> /run/systemd/mount-rootfs/proc/slabinfo,
lxc.apparmor.raw: mount options=(rw, nosuid, nodev, noexec, remount, bind) -> /run/systemd/mount-rootfs/proc/meminfo,
lxc.apparmor.raw: mount options=(rw, nosuid, nodev, noexec, remount, bind) -> /run/systemd/mount-rootfs/proc/swaps,
lxc.apparmor.raw: mount options=(rw, nosuid, nodev, noexec, remount, bind) -> /run/systemd/mount-rootfs/proc/loadavg,
lxc.apparmor.raw: mount options=(rw, nosuid, nodev, noexec, remount, bind) -> /run/systemd/mount-rootfs/proc/cpuinfo,
lxc.apparmor.raw: mount options=(rw, nosuid, nodev, noexec, remount, bind) -> /run/systemd/mount-rootfs/proc/diskstats,
lxc.apparmor.raw: mount options=(rw, nosuid, nodev, noexec, remount, bind) -> /run/systemd/mount-rootfs/proc/,
lxc.apparmor.raw: mount options=(rw, nosuid, nodev, noexec, remount, bind) -> /run/systemd/mount-rootfs/proc/stat,
lxc.apparmor.raw: mount options=(rw, nosuid, nodev, noexec) -> /run/systemd/unit-root/proc/,
lxc.apparmor.raw: mount options=(ro, nosuid, nodev, noexec) -> /sys/kernel/config/,
lxc.apparmor.raw: mount options=(rw, nosuid, nodev, noexec) -> /sys/kernel/config/,
</pre></blockquote>

 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="https://blog.raymond.burkholder.net/index.php?/archives/1336-Sample-Proxmox-command-to-build-LXC-container-from-Template.html" rel="alternate" title="Sample Proxmox command to build LXC container from Template" />
        <author>
            <name>Raymond P. Burkholder</name>
                    </author>
    
        <published>2026-02-28T04:40:48Z</published>
        <updated>2026-02-28T04:40:48Z</updated>
        <wfw:comment>https://blog.raymond.burkholder.net/wfwcomment.php?cid=1336</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.raymond.burkholder.net/rss.php?version=atom1.0&amp;type=comments&amp;cid=1336</wfw:commentRss>
    
            <category scheme="https://blog.raymond.burkholder.net/index.php?/categories/88-Proxmox" label="Proxmox" term="Proxmox" />
    
        <id>https://blog.raymond.burkholder.net/index.php?/archives/1336-guid.html</id>
        <title type="html">Sample Proxmox command to build LXC container from Template</title>
        <content type="xhtml" xml:base="https://blog.raymond.burkholder.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <blockquote><pre>
pct_id=101
pct_name=test01
pct create $pct_id /var/lib/pve/local-btrfs/template/cache/trixie-13-3-template.tar.xz  \
  -hostname $pct_name \
  -description 'demo build' \
  -onboot 1 \
  -startup up=3 \
  -ostype debian \
  -arch amd64 \
  -cores 2 \
  -memory 1024 \
  -nameserver 10.10.10.10 -searchdomain 'example.com' \
  -net0 name=vlan30,bridge=vmbr1,ip=dhcp,tag=30,type=veth \
  -rootfs local-btrfs:8,mountoptions="noatime;discard" \
  -swap 512
</pre></blockquote> 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="https://blog.raymond.burkholder.net/index.php?/archives/916-Migrating-LXC-Containers-From-One-Machine-To-Another.html" rel="alternate" title="Migrating LXC Containers From One Machine To Another" />
        <author>
            <name>Raymond P. Burkholder</name>
                    </author>
    
        <published>2018-04-04T15:39:24Z</published>
        <updated>2026-02-28T04:36:40Z</updated>
        <wfw:comment>https://blog.raymond.burkholder.net/wfwcomment.php?cid=916</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.raymond.burkholder.net/rss.php?version=atom1.0&amp;type=comments&amp;cid=916</wfw:commentRss>
    
            <category scheme="https://blog.raymond.burkholder.net/index.php?/categories/7-LXC" label="LXC" term="LXC" />
    
        <id>https://blog.raymond.burkholder.net/index.php?/archives/916-guid.html</id>
        <title type="html">Migrating LXC Containers From One Machine To Another</title>
        <content type="xhtml" xml:base="https://blog.raymond.burkholder.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>For some machines with LXC containers, they have been running for a number of years.  I want to take the easy way out and move the containers from one physical machine to another.  At another time, I will rebuild the containers.

<p>Since I am running BTRFS subvolumes for each container, I could be using BTRFS snapshot/send/receive commands to migrate/copy/replicate subvolumes.  But before attempting that, I wanted to give the 'copy' a try.  To do this properly, at the source, use the following -- with numeric-owner being a required paramenter -- command to collect the files:

<blockquote><pre>
tar --numeric-owner -czvf mycontainer.tar.gz /var/lib/lxc/my_container
</pre></blockquote>

<p>At the destination, expand that file out:

<blockquote><pre>
tar --numeric-owner -xzvf mycontainer.tar.gz -C /var/lib/lxc/
</pre></blockquote>

<p>The <a href="http://lxc-users.linuxcontainers.narkive.com/ATkcbMOJ/what-is-right-way-to-backup-and-restore-linux-containers" target=_blank>lxc users mailing list</a> and 
<a href="https://stackoverflow.com/questions/23427129/how-do-i-backup-move-lxc-containers" target=_blank>Stack OverFlow</a> were helpful.

<p>Other stuff to do:

<ul>
  <li>Read up on <a href="http://man7.org/linux/man-pages/man7/cgroups.7.html" target=_blank>CGroups</a> in the Linux Programmer's Manual
  </ul>

<p>In migrating from a very old version of LXC to a much newer version of LXC, I was getting errors.  I needed to run a some debug to get a handle on errors:

<blockquote><pre>
lxc-start -n container -F --logpriority=DEBUG --logfile log
</pre></blockquote>

<p>I had errors along the lines of:

<blockquote><pre>
Activating lvm and md swap...done.
Checking file systems...Segmentation fault (core dumped)
failed (code 139).
</pre></blockquote>

<p><a href="https://serverfault.com/questions/896524/how-to-fix-filesystem-of-a-lxc-container" target=_blank>ServerFault</a> had the solution: put "vsyscall=emulate" into /etc/default/grub, run 'update-grub' and reboot.  Looks like I need to modernize my containers so I can eliminate this workaround, which may have some security considerations.  There is a <a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=891393" target=_blank>Debian Bug</a> for this.

<p><a href="https://einsteinathome.org/content/vsyscall-now-disabled-latest-linux-distros" target=_blank>einstein home</a> has a blog with some kernel references to the issue, in effect saying: "vsyscall is now disabled on latest linux distros".  A lengthier LWN article at
<a href="https://lwn.net/Articles/446528/" target=_blank>On vsyscalls and the vDSO</a>.  This works with kernel 4.14, my current version, but I see somewhere else that the workaround is entirely removed in kernel 4.15, at least in the Arch world.  At <a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=847154" target=_blank>bug 847154</a>: "This breaks (e)glibc 2.13 and earlier".

<p>Note, see newer notes at <a href="https://blog.raymond.burkholder.net/index.php?/archives/1335-LXC-Fresh-Container-Construction-From-Scratch-for-Proxmox.html" target=_blank>LXC Fresh Container Construction From Scratch for Proxmox</a>. 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="https://blog.raymond.burkholder.net/index.php?/archives/1334-Debian-Headers-first-then-Kernel-for-DKMS-rebuilds.html" rel="alternate" title="Debian Headers first then Kernel for DKMS rebuilds" />
        <author>
            <name>Raymond P. Burkholder</name>
                    </author>
    
        <published>2026-01-17T03:39:34Z</published>
        <updated>2026-01-17T03:39:34Z</updated>
        <wfw:comment>https://blog.raymond.burkholder.net/wfwcomment.php?cid=1334</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.raymond.burkholder.net/rss.php?version=atom1.0&amp;type=comments&amp;cid=1334</wfw:commentRss>
    
            <category scheme="https://blog.raymond.burkholder.net/index.php?/categories/5-Debian" label="Debian" term="Debian" />
    
        <id>https://blog.raymond.burkholder.net/index.php?/archives/1334-guid.html</id>
        <title type="html">Debian Headers first then Kernel for DKMS rebuilds</title>
        <content type="xhtml" xml:base="https://blog.raymond.burkholder.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>Something from a Debian mailing list:

<blockquote>
<p>I found the root cause, when testing 6.12.57 I installed the image then the 
headers and the NVIDIA DKMS module was not rebuilt because the matching linux-
headers package was not installed at the time the kernel image was configured.

<p>If I install the headers first and then the linux-image package, DKMS correctly 
builds the NVIDIA module and 6.12.63 works fine, so it doesn't look like a 
kernel regression after all.

<p>I don't know if I should manually run dkms autoinstall myself after a kernel 
update  (I never had to before) or if there was a bug during the install 
process of this update.
</blockquote>

<p>Makes sense, I had NVidia compile fail in a similar.  This makes it obvious what I should have observed.

 
            </div>
        </content>
        
    </entry>

</feed>