宿主机准备 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++ 约定俗成 谁都能用!