我一直在使用 docker 容器来构建 Chrome 浏览器(在 Debian 10 上为 Android 构建)。我已经创建了一个 Dockerfile,其中包含我需要的大部分包。
现在,在构建并运行容器后,我按照说明进行操作,该说明要求我执行安装脚本 (./build/install-build-deps-android.sh)。在这个脚本中,执行了多个 apt install 命令。
我现在的问题是,有没有办法在不重建容器的情况下安装这些包?下载和构建它花费了相当长的时间,再加上每次需要一个新包时重建一个容器似乎不是最理想的。执行安装脚本时出现的错误是:
./build/install-build-deps-android.sh: line 21: lsb_release: command not found
Run Code Online (Sandbox Code Playgroud)
(我猜会有多个丢失的包)。使用 apt 将给出:
root@677e294147dd:/android-build/chromium/src# apt install nginx
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package nginx
Run Code Online (Sandbox Code Playgroud)
(nginx 仅作为安装示例)。
我很感激任何提示,因为我只能找到使用 Dockerfile 安装软件包的指南。
我正在尝试了解的glibc实现fseek。为此,我下载了glibc源代码并尝试了解其功能执行顺序。
我在中找到了fseek实现libio/fseek.c。基本上,它_IO_fseek()使用相同的参数调用函数(或宏)。该宏在中实现libio/iolibio.h。
它定义为_IO_seekoff_unlocked (__fp, __offset, __whence, _IOS_INPUT|_IOS_OUTPUT)(在中实现libio/ioseekoff.c)。执行它的下一步对我来说很混乱:
_IO_seekoff_unlocked基本上是return _IO_SEEKOFF (fp, offset, dir, mode);,它返回_IO_seekoff_unlocked (fp, offset, dir, mode);,这应该创建一个调用循环。
另外,在strace示例程序(seek.c)上使用时:
#include <stdio.h>
int main(void) {
printf("[Fseek] Executing fseek\n");
FILE *f = fopen("./seek.c", "rb");
fseek(f, 0L, SEEK_END);
}
Run Code Online (Sandbox Code Playgroud)
它表明fseek将调用read系统调用,即使我在glibc实现中找不到它。
...
write(1, "[Fseek] Executing fseek\n", 24[Fseek] Executing fseek
) = 24
openat(AT_FDCWD, "./seek.c", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, …Run Code Online (Sandbox Code Playgroud) 安装 Debian 10 (Buster) 时,桌面/GUI 应用程序速度很慢。打开应用程序(例如 Firefox、Terminal...)需要很长时间,并且系统根本无法使用。
apt update && apt upgrade
Run Code Online (Sandbox Code Playgroud)
根本没有帮助。显然这是CPU或GPU驱动程序的问题。我在 Intel i5 + Nvidia GTX 版本上安装了 Debian(不确定 GPU 是否也负责这里)。
我能找到的唯一信息是这个,但这并没有解决问题
apt ×1
c ×1
docker ×1
dockerfile ×1
driver ×1
intel ×1
libc ×1
linux ×1
nvidia ×1
system-calls ×1