Ubuntu
如何在我信任的 docker 容器上安裝缺少的 /lib/modules/$(uname -r)
在 Mac 上執行docker
docker pull ubuntu:14.04 docker run -i -t ubuntu:14.04 /bin/bash
Linux 標準庫
root@d112db1e835e:~# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 14.04.5 LTS Release: 14.04 Codename: trusty
我的目標是淘汰用於建構一些好的舊 C 程式碼的專用筆記型電腦,並改用 docker 容器。
為了編譯我的程式碼,我
Makefile
正在尋找執行Makefile: /usr/bin/make -C /lib/modules/$(shell uname -r)/build M=$(PWD)/linux/$* modules
不幸的是
modules
文件夾是空的mysuer@d112db1e835e:~/robot$ ls -al /lib/modules/ ls: cannot access /lib/modules/: No such file or directory
在我的 linux 機器上,我可以找到模組
$ ls -al /lib/modules/ total 28 drwxr-xr-x 7 root root 4096 Dez 13 2016 . drwxr-xr-x 24 root root 4096 Apr 24 2017 .. drwxr-xr-x 5 root root 4096 Dez 13 2016 3.13.0-105-generic drwxr-xr-x 5 root root 4096 Jun 23 2015 3.13.0-55-generic drwxr-xr-x 5 root root 4096 Jul 10 2015 3.13.0-57-generic drwxr-xr-x 5 root root 4096 Nov 3 2015 3.13.0-65-generic drwxr-xr-x 5 root root 4096 Nov 24 2015 3.13.0-68-generic
但我的 docker 中沒有模組。
在我的碼頭上
uname -r 4.9.60-linuxkit-aufs
因此
/usr/bin/make -C /lib/modules/4.9.60-linuxkit-aufs/build .... FAILS
/lib/modules/4.9.60-linuxkit-aufs
不在這裡。我該如何解決這個問題?
嘗試安裝標頭
apt-cache search linux-headers-4 linux-headers-4.2.0-18 - Header files related to Linux kernel version 4.2.0 linux-headers-4.2.0-18-generic - Linux kernel headers for version 4.2.0 on 64 bit x86 SMP linux-headers-4.2.0-18-lowlatency - Linux kernel headers for version 4.2.0 on 64 bit x86 SMP linux-headers-4.2.0-19 - Header files related to Linux kernel version 4.2.0 linux-headers-4.2.0-19-generic - Linux kernel headers for version 4.2.0 on 64 bit x86 SMP linux-headers-4.2.0-19-lowlatency - Linux kernel headers for version 4.2.0 on 64 bit x86 SMP linux-headers-4.2.0-21 - Header files related to Linux kernel version 4.2.0 linux-headers-4.2.0-21-generic - Linux kernel headers for version 4.2.0 on 64 bit x86 SMP linux-headers-4.2.0-21-lowlatency - Linux kernel headers for version 4.2.0 on 64 bit x86 SMP linux-headers-4.2.0-22 - Header files related to Linux kernel version 4.2.0 ...
我找不到 4.9.60 的標題
root@d112db1e835e:~# apt-get install linux-headers-$(uname -r) Reading package lists... Done Building dependency tree Reading state information... Done E: Unable to locate package linux-headers-4.9.60-linuxkit-aufs E: Couldn't find any package by regex 'linux-headers-4.9.60-linuxkit-aufs'
或者
root@d112db1e835e:~# apt-cache search linux-headers-4.9 root@d112db1e835e:~#
沒有候選人
root@d112db1e835e:~# apt-get install linux-headers Reading package lists... Done Building dependency tree Reading state information... Done Package linux-headers is a virtual package provided by: linux-headers-4.4.0-1010-aws 4.4.0-1010.10 linux-headers-4.4.0-1009-aws 4.4.0-1009.9 ... FILTERED ... linux-headers-3.13.0-100-lowlatency 3.13.0-100.147 linux-headers-3.13.0-100-generic 3.13.0-100.147 You should explicitly select one to install. E: Package 'linux-headers' has no installation candidate root@d112db1e835e:~#
不返回任何包裹
root@d112db1e835e:~# apt-cache search linux-source linux-source - Linux kernel source with Ubuntu patches linux-source-3.13.0 - Linux kernel source for version 3.13.0 with Ubuntu patches
Docker for Mac 是用Hyperkit for Virtualization 建構的(參見FAQ),並執行一個linuxkit核心(你已經知道),它是為執行容器定制的,所以當涉及到使用/與核心相關的低級別開發時,它不會它的工作方式與使用正常 linux 發行版不同。
我強烈建議將QEMU用於此類工作,因為您可以模擬不同類型的硬體,使用不同的 BIOS,甚至使用ipxe進行 pxeboot 。
話雖如此,要回答您的問題,您需要為您的容器安裝
linux-virtual
一個通用的 linux 核心。編輯:也
uname -r
不會工作,因為它將是不同的核心版本。trusty (14.04) 的預設核心版本仍然是 3.x