记如何开一个container用来工作

@vrqq  August 22, 2021

宿主机准备 podman

podman run --name rhel8 -it -p22222:22 -d -v/data/vrqq:/project:z ubi8/ubi

In container

自带的软件源没有sshd,需要拉源马编译

dnf install zlib-devel wget openssl-devel autoconf make gcc
wget https://ftp.riken.jp/pub/OpenBSD/OpenSSH/portable/openssh-8.7p1.tar.gz
autoconf
make
useradd sshd
make install

之后配置证书登录 vim /usr/local/etc/sshd_config

  • PermitRootLogin prohibit-password
  • PubkeyAuthentication yes
  • AuthorizedKeysFile .ssh/authorized_keys
  • PasswordAuthentication no

别忘给.ssh和.ssh/authorized_keys设权限

好了之后运行 /usr/local/sbin/sshd

连上之后装点常用软件

  • 开启自带debuginfo源 vim /etc/yum.repos.d/ubi.repo
  • Epel Repo https://fedoraproject.org/wiki/EPEL

    dnf debuginfo-install libstdc++ glibc libgcc
    dnf install distcc-server net-tools binutils-devel llvm-libs llvm-toolset lld compiler-rt

Case X. 要准备个centos 7 的container做测试

新建容器,注意如果想使用sanitizer需要在容器内可以ptrace,要加权限
podman --cap-add=SYS_PTRACE ...

建议使用spack直接带源码编译 别折腾自己装gcc 还要配环境太麻烦..
先准备下spack的基础包 然后直接git clone repo即可(遇到一个坑的是github上不去,发现dns的锅 改成阿里dns好了,或者直接用cnpmjs)
https://spack.readthedocs.io/en/latest/getting_started.html

git clone https://github.com.cnpmjs.org/spack/spack.git
yum install epel-release
yum install python3 gcc make patch bash tar gzip unzip bzip xz zstd file gnupg2 git svn hg

版本低点不碍的,能用就行!

然后先装高版本gcc才能编译llvm: spack install gcc

装好以后加载高版本gcc环境(>=5.1.0) 然后设置成默认编译器(这里跳过 网上有)

spack load gcc
spack compiler find

用高版本gcc编译llvm-clang
附录 版本说明:https://llvm.org/docs/GettingStarted.html#getting-the-source-code-and-building-llvm
不用管它,spack可以自动帮忙处理好

spack install llvm
spack load llvm
spack compiler find

好了 以后想用就直接spack load llvm即可!
这里有个坑,他依赖的python库不是系统库,所以在spack load产生的虚拟环境中yum命令不能用,需要退出虚拟环境后再用(spack unload)

如果提示LeakSanitizer has encountered a fatal error.

==110662==AddressSanitizer: failed to intercept '__isoc99_printf'
==110662==AddressSanitizer: failed to intercept '__isoc99_sprintf'
...
==110662==LeakSanitizer has encountered a fatal error.
==110662==HINT: For debugging, try setting environment variable LSAN_OPTIONS=verbosity=1:log_threads=1
==110662==HINT: LeakSanitizer does not work under ptrace (strace, gdb, etc)

不用sanitizer,否则需要开container的--cap-add SYS_PTRACE权限

新款clang配老款系统 打包超轻松

  • 若接口不含c++ stl 例如string vector...,可以考虑-stdlib=libc++然后静态链接llvm-stl库)
  • 如果接口含stl还是老实用gnu-libstdc++ 约定俗成 谁都能用!

添加新评论