我想在 Alpine 中构建内核模块;我知道如何在 Ubuntu 中做到这一点。
在 Ubuntu 中,我曾经通过运行以下命令来安装内核头文件:
apt install -y build-essential linux-headers-$(uname -r)
Run Code Online (Sandbox Code Playgroud)
Alpine 中的等效项是什么?
我在网上搜索了一下,Github 用户 progrium 写了一条评论,相当于build-essential
is build-base
,但是 呢linux-headers-$(uname -r)
?
我正在使用 Linux Ubuntu 16.04。
在这个挑战中,我想从 Linux shell 中删除一些命令。
具体来说,我想删除exit
命令。
我希望如果用户尝试使用此命令退出 shell,则不可能,甚至可能会发送一些消息。
知道我该怎么做吗?
我搜索了一个名为 的文件exit
:
find / -name exit
但它只找到了目录:
/usr/src/linux-headers-4.13.0-41-generic/include/config/have/exit
/usr/src/linux-headers-4.13.0-41-generic/include/config/have/irq/exit
/usr/src/linux-headers-4.13.0-43-generic/include/config/have/exit
/usr/src/linux-headers-4.13.0-43-generic/include/config/have/irq/exit
/usr/src/linux-headers-4.13.0-36-generic/include/config/have/exit
/usr/src/linux-headers-4.13.0-36-generic/include/config/have/irq/exit
/usr/src/linux-headers-4.15.0-43-generic/include/config/have/exit
/usr/src/linux-headers-4.15.0-43-generic/include/config/have/irq/exit
Run Code Online (Sandbox Code Playgroud)
编辑:
我在这里阅读了关于trap
像这样使用的信息trap "ENTER-COMMAND-HERE" EXIT
,我尝试过,trap "sh" EXIT
但它仍然存在外壳。
这是我的进程列表:
$ ps
PID USER TIME COMMAND
1 root 0:00 bash -c cp -R /docker /var/lib; echo Loading...; wrapdocker
7 root 0:00 bash --login
312 root 0:00 dockerd
321 root 0:00 containerd --config /var/run/docker/containerd/containerd.toml --log-level info
488 root 0:00 ps
Run Code Online (Sandbox Code Playgroud)
我想检查进程dockerd
是否正在运行。
当我运行时:ps | grep dockerd
它打印两个进程:
$ ps | grep 'dockerd'
312 root 0:00 dockerd
492 root 0:00 grep dockerd
Run Code Online (Sandbox Code Playgroud)
我需要通过特定的命令行找到它,dockerd
而不是grep dockerd
.
我需要它作为 shell 脚本的一部分来检查是否dockerd
正在运行。
我想做一些奇怪的容器,我的任务之一是替换uname
二进制文件。
我编码它:
#include <stdio.h>
int main() {
printf("This is a fake uname\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译它:
gcc uname.c -o uname
Run Code Online (Sandbox Code Playgroud)
当我在我的 ubuntu 上运行它时它工作正常。
我创建了一个Dockerfile
并将其复制到图像中:
cat > Dockerfile <<EOF
FROM alpine:latest
RUN rm /bin/uname
COPY uname /bin/
ENTRYPOINT sh;
WORKDIR /home
EOF
Run Code Online (Sandbox Code Playgroud)
并建造它 docker build -t myimage -f Dockerfile .
当我运行图像时:
docker run -it --rm myimage
Run Code Online (Sandbox Code Playgroud)
该文件存在,但是当我尝试运行它时,它写入它不存在:
/home # uname
sh: uname: not found
/home # ls -lia uname
ls: uname: No such file or directory
/home …
Run Code Online (Sandbox Code Playgroud) 我没有主机,dpkg
所以我需要安装它。
我按照这里和这里的说明进行操作。
在这两个答案中,他们都写道我需要下载文件:
wget http://security.ubuntu.com/ubuntu/pool/main/d/dpkg/dpkg_1.17.5ubuntu5.2_i386.deb
or
wget http://security.ubuntu.com/ubuntu/pool/main/d/dpkg/dpkg_1.17.5ubuntu5.2_amd64.deb
Run Code Online (Sandbox Code Playgroud)
并tar
像这样使用:
tar x dpkg*.deb data.tar.gz
tar xfvz data.tar.gz ./usr/bin/dpkg
cp ./usr/bin/dpkg /usr/bin/
Run Code Online (Sandbox Code Playgroud)
但是运行后tar x dpkg*.deb data.tar.gz
失败了:
[root@webtl1 ~]# tar x dpkg*.deb data.tar
tar: Refusing to read archive contents from terminal (missing -f option?)
tar: Error is not recoverable: exiting now
Run Code Online (Sandbox Code Playgroud)
我点击了这个链接:
https : //askubuntu.com/questions/143107/how-to-extract-archives-to-file-system-in-terminal
并尝试使用tar xvzf dpkg*.deb data.tar.gz
但它也失败了:
gzip: stdin: not in gzip format
tar: Child returned status 1
tar: …
Run Code Online (Sandbox Code Playgroud) 我有以下脚本:
installRequiredFiles=$1
install_with_pkg()
{
arg1=$1
echo $arg1
echo "[+] Running update: $arg1 update."
}
if [ $installRequiredFiles = "true" ]; then
if [ -x "$(command -v apt)" ]; then
install_with_pkg "apt"
elif [ -x "$(command -v yum)" ]; then
install_with_pkg "yum"
elif [ -x "$(command -v apk)" ]; then
install_with_pkg "apk"
else
echo "[!] Can't install files."
fi
fi
Run Code Online (Sandbox Code Playgroud)
当我直接运行它时,它工作正常:
root@ubuntu:/# ./myscript.sh "true"
apt
[+] Running update: apt update.
Printing installRequiredFiles: true
Printing arg1: apt
Run Code Online (Sandbox Code Playgroud)
但是当我使用时,sh -c
我收到以下错误:
root@ubuntu:/# …
Run Code Online (Sandbox Code Playgroud)