这个是为融合版+zerotier做准备的,因为过程比较复杂所以先单独写一篇文章。
才不是怕忘了呢
这个方法同时在噢易云融合版服务器与idv终端安装,之所以不用voi终端,是因为voi最小系统啥都缺,太麻烦了。之所以不用一键脚本,是因为服务端的源已经暂停服务了,客户端用一键脚本可能会导致环境出问题。下面的方法均可在服务端客户端使用。
建议使用一键脚本或者编译成rpm后再进行安装的方法。
噢易云融合版使用官方脚本安装zerotier
准备
以下内容仅供内部人员了解
根目录可写
出于防病毒的目的,根目录/
默认是只读的,需要使用
mount -o remount,rw /
才能进行读写根目录。重启后失效。
修改/etc/fstab
的内容为rw已无法生效了。
离线安装gcc
无论是客户端还是服务端都没完整安装gcc以及gcc-c++,因此我要编译只能先用rpm安装旧版的,然后再用编译安装新版的。
idv客户端操作系统环境为:
[root@idv-467b48 ~]# cat /etc/centos-release
Idv Client release 7.6.0 (Core)
[root@idv-467b48 ~]# uname -a
Linux idv-467b48 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
虽然隐藏了具体版本,但看到熟悉的3.10基本上就感觉就是centos没错(废话)
获取gcc安装包
我是用的centos7.3的iso+在线镜像站获取的文件,需要以下文件:
[root@localhost gcc-6.3.0]# ll /root/rpm
总用量 56908
-rwxrwxrwx. 1 root root 53120 2月 5 21:00 bzip2-1.0.6-13.el7.x86_64.rpm
-rwxrwxrwx. 1 root root 6225248 2月 5 20:49 cpp-4.8.5-11.el7.x86_64.rpm
-rwxrwxrwx. 1 root root 16957504 2月 5 20:49 gcc-4.8.5-11.el7.x86_64.rpm
-rwxrwxrwx. 1 root root 7519876 2月 5 20:49 gcc-c++-4.8.5-11.el7.x86_64.rpm
-rwxrwxrwx. 1 root root 3767280 2月 5 20:49 glibc-2.17-157.el7.x86_64.rpm
-rwxrwxrwx. 1 root root 12038164 2月 5 20:49 glibc-common-2.17-157.el7.x86_64.rpm
-rwxrwxrwx. 1 root root 1106292 2月 5 20:49 glibc-devel-2.17-157.el7.x86_64.rpm
-rwxrwxrwx. 1 root root 684244 2月 5 20:49 glibc-headers-2.17-157.el7.x86_64.rpm
-rwxrwxrwx. 1 root root 1599280 2月 5 20:49 glibc-static-2.17-157.el7.x86_64.rpm
-rwxrwxrwx. 1 root root 213324 2月 5 20:49 glibc-utils-2.17-157.el7.x86_64.rpm
-rwxrwxrwx. 1 root root 184868 2月 5 20:49 gmp-devel-6.0.0-12.el7_1.x86_64.rpm
-rwxrwxrwx. 1 root root 5001232 2月 5 20:49 kernel-headers-3.10.0-514.el7.x86_64.rpm
-rwxrwxrwx. 1 root root 155972 2月 5 20:49 libgomp-4.8.5-11.el7.x86_64.rpm
-rwxrwxrwx. 1 root root 51732 2月 5 20:49 libmpc-1.0.1-3.el7.x86_64.rpm
-rwxrwxrwx. 1 root root 32904 2月 5 20:49 libmpc-devel-1.0.1-3.el7.x86_64.rpm
-rwxrwxrwx. 1 root root 306804 2月 5 20:49 libstdc++-4.8.5-11.el7.x86_64.rpm
-rwxrwxrwx. 1 root root 1574820 2月 5 20:49 libstdc++-devel-4.8.5-11.el7.x86_64.rpm
-rwxrwxrwx. 1 root root 418184 2月 5 20:49 libstdc++-static-4.8.5-11.el7.x86_64.rpm
-rwxrwxrwx. 1 root root 208316 2月 5 20:49 mpfr-3.1.1-4.el7.x86_64.rpm
-rwxrwxrwx. 1 root root 69904 2月 5 20:49 mpfr-devel-3.1.1-4.el7.x86_64.rpm
-rwxrwxrwx. 1 root root 51044 2月 5 20:49 zlib-devel-1.2.7-17.el7.x86_64.rpm
你可以在http://vault.centos.org/7.3.1611/os/x86_64/Packages/
获取对应的rpm包,大的版本要相同,小版本可以不一样,不然我不保证能装上去。
将这些文件单独存放到一个之前是空的文件夹中即可
安装gcc
这里安装gcc的同时也安装了gcc-c++
记得给权限:
chmod 777 -R /root/rpm
使用
rpm -ivh *.rpm --nodeps --force
即可批量安装,他们之间的依赖会自动排序安装。
验证
建议开个新终端,使用:
[root@idv-467b48 ~]# gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28)
Copyright © 2015 Free Software Foundation, Inc.
本程序是自由软件;请参看源代码的版权声明。本软件没有任何担保;
包括没有适销性和某一专用目的下的适用性担保
验证安装成功。
此时gcc-c++
也安装成功了。
但这个gcc版本编译不了zerotier,需要手动更新。
更新gcc
准备文件
建议使用6.3.0
版的gcc,我试过4.9.3与10.2,编译zerotier均有报错,用6.3.0目前是最合适的。
使用cd /usr/local/src/
进入目录,然后下载gcc-6.3.0.tar.gz
后上传到这个目录
http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-6.3.0/gcc-6.3.0.tar.gz
使用tar -xvf gcc-6.3.0.tar.gz
解压得到gcc-6.3.0
文件夹,进入这个文件夹。
如果设备有联网执行./contrib/download_prerequisites
没网就手动下载以下四个依赖到上面解压的gcc-6.3.0
文件夹中:
ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2
ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-4.3.2.tar.bz2
ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz
ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.15.tar.bz2
(地址扔浏览器就可以下载了)
然后使用:
tar -xjf mpfr-2.4.2.tar.bz2
chmod 777 -R mpfr-2.4.2
ln -sf mpfr-2.4.2 mpfr
tar -xjf gmp-4.3.2.tar.bz2
chmod 777 -R gmp-4.3.2
ln -sf gmp-4.3.2 gmp
tar -xvf mpc-0.8.1.tar.gz
chmod 777 -R mpc-0.8.1
ln -sf mpc-0.8.1 mpc
tar -xjf isl-0.15.tar.bz2
chmod 777 -R isl-0.15
ln -sf isl-0.15 isl
编译
mkdir -p /usr/local/build/gcc-6.3.0
cd /usr/local/build/gcc-6.3.0
/usr/local/src/gcc-6.3.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
如果你没事可以用
make
单线程,如果要多线程就用
grep 'processor' /proc/cpuinfo | sort -u | wc -l
查看线程数,然后用一半的线程编译就行了。
make -j2
大概要等几小时。
然后使用
make install
安装,在新的终端使用gcc -v查看是否安装成功
[root@localhost ~]# gcc -v
使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper
目标:x86_64-pc-linux-gnu
配置为:/usr/local/src/gcc-6.3.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
线程模型:posix
gcc 版本 6.3.0 (GCC)
对了,编译gcc非常占硬盘空间,编译前注意给根目录预留:
编译前:
[root@localhost gcc-6.3.0]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 3.8G 0 3.8G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 12M 3.8G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 44G 2.8G 42G 7% /
/dev/sda1 1014M 193M 822M 20% /boot
tmpfs 781M 0 781M 0% /run/user/0
编译后:
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 3.8G 0 3.8G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 12M 3.8G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 44G 8.1G 36G 19% /
/dev/sda1 1014M 193M 822M 20% /boot
tmpfs 781M 0 781M 0% /run/user/0
用了近5G,如果硬盘空间不够会报奇怪的错误,比如:
In file included from /usr/local/src/gcc-6.3.0/libstdc++-v3/include/precompiled/stdc++.h:122:0:
/usr/local/build/gcc-6.3.0/x86_64-pc-linux-gnu/libstdc++-v3/include/shared_mutex:682:1: fatal error:can’t write PCH file: 设备上没有空间
} // namespace
^
compilation terminated.
make[5]: *** [x86_64-pc-linux-gnu/bits/stdc++.h.gch/O2g.gch] 错误 1
make[5]: 离开目录“/usr/local/build/gcc-6.3.0/x86_64-pc-linux-gnu/libstdc++-v3/include”
make[4]: *** [all-recursive] 错误 1
make[4]: 离开目录“/usr/local/build/gcc-6.3.0/x86_64-pc-linux-gnu/libstdc++-v3”
make[3]: *** [all] 错误 2
make[3]: 离开目录“/usr/local/build/gcc-6.3.0/x86_64-pc-linux-gnu/libstdc++-v3”
make[2]: *** [all-stage1-target-libstdc++-v3] 错误 2
make[2]: 离开目录“/usr/local/build/gcc-6.3.0”
make[1]: *** [stage1-bubble] 错误 2
make[1]: 离开目录“/usr/local/build/gcc-6.3.0”
make: *** [all] 错误 2
由于idv终端自动安装给的根目录很小,/etc空间还足够大
[root@idv-467b48 gcc-6.3.0]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda5 4.7G 4.7G 0 100% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 5.0M 1.9G 1% /dev/shm
tmpfs 1.9G 12M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
none 1.9G 460K 1.9G 1% /var/tmp
/dev/sda6 87G 373M 87G 1% /etc
/dev/sda2 477M 158M 291M 36% /boot
tmpfs 381M 0 381M 0% /run/user/0
因此可以把gcc安装到/etc
目录
/etc/zerotier/
├── build
│ └── gcc-6.3.0
├── rpm
│ ├── bzip2-1.0.6-13.el7.x86_64.rpm
│ ├── cpp-4.8.5-11.el7.x86_64.rpm
│ ├── gcc-4.8.5-11.el7.x86_64.rpm
│ ├── gcc-c++-4.8.5-11.el7.x86_64.rpm
│ ├── glibc-2.17-157.el7.x86_64.rpm
│ ├── glibc-common-2.17-157.el7.x86_64.rpm
│ ├── glibc-devel-2.17-157.el7.x86_64.rpm
│ ├── glibc-headers-2.17-157.el7.x86_64.rpm
│ ├── glibc-static-2.17-157.el7.x86_64.rpm
│ ├── glibc-utils-2.17-157.el7.x86_64.rpm
│ ├── gmp-devel-6.0.0-12.el7_1.x86_64.rpm
│ ├── kernel-headers-3.10.0-514.el7.x86_64.rpm
│ ├── libgomp-4.8.5-11.el7.x86_64.rpm
│ ├── libmpc-1.0.1-3.el7.x86_64.rpm
│ ├── libmpc-devel-1.0.1-3.el7.x86_64.rpm
│ ├── libstdc++-4.8.5-11.el7.x86_64.rpm
│ ├── libstdc++-devel-4.8.5-11.el7.x86_64.rpm
│ ├── libstdc++-static-4.8.5-11.el7.x86_64.rpm
│ ├── mpfr-3.1.1-4.el7.x86_64.rpm
│ ├── mpfr-devel-3.1.1-4.el7.x86_64.rpm
│ └── zlib-devel-1.2.7-17.el7.x86_64.rpm
└── src
├── gcc-6.3.0
└── gcc-6.3.0.tar.gz
在上文中,使用
mkdir -p /etc/local/build/gcc-6.3.0
cd /etc/local/build/gcc-6.3.0
/usr/local/src/gcc-6.3.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
然后make与make install
结束后使用make clean
清理
检查是否安装完成。
[root@idv-36f9d5 ~]# gcc -v
使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper
目标:x86_64-pc-linux-gnu
配置为:/etc/zerotier/src/gcc-6.3.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
线程模型:posix
gcc 版本 6.3.0 (GCC)
[root@idv-36f9d5 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda5 4.7G 3.2G 1.3G 71% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 5.0M 1.9G 1% /dev/shm
tmpfs 1.9G 12M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
none 1.9G 460K 1.9G 1% /var/tmp
/dev/sda6 87G 6.0G 81G 7% /etc
/dev/sda2 477M 158M 291M 36% /boot
tmpfs 381M 0 381M 0% /run/user/0
有点极限。
编译安装zerotier
编译
从GitHub下载zip,上传上去,解压,进入文件夹
unzip ZeroTierOne-master.zip
cd ZeroTierOne-master/
然后直接在文件夹内make即可,会有警告,可以无视,不影响使用。
make
make install
提示:
[root@idv-36f9d5 ZeroTierOne-master]# make install
mkdir -p /usr/sbin
rm -f /usr/sbin/zerotier-one
cp -f zerotier-one /usr/sbin/zerotier-one
rm -f /usr/sbin/zerotier-cli
rm -f /usr/sbin/zerotier-idtool
ln -s zerotier-one /usr/sbin/zerotier-cli
ln -s zerotier-one /usr/sbin/zerotier-idtool
mkdir -p /var/lib/zerotier-one
rm -f /var/lib/zerotier-one/zerotier-one
rm -f /var/lib/zerotier-one/zerotier-cli
rm -f /var/lib/zerotier-one/zerotier-idtool
ln -s ../../../usr/sbin/zerotier-one /var/lib/zerotier-one/zerotier-one
ln -s ../../../usr/sbin/zerotier-one /var/lib/zerotier-one/zerotier-cli
ln -s ../../../usr/sbin/zerotier-one /var/lib/zerotier-one/zerotier-idtool
mkdir -p /usr/share/man/man8
rm -f /usr/share/man/man8/zerotier-one.8.gz
cat doc/zerotier-one.8 | gzip -9 >/usr/share/man/man8/zerotier-one.8.gz
mkdir -p /usr/share/man/man1
rm -f /usr/share/man/man1/zerotier-idtool.1.gz
rm -f /usr/share/man/man1/zerotier-cli.1.gz
cat doc/zerotier-cli.1 | gzip -9 >/usr/share/man/man1/zerotier-cli.1.gz
cat doc/zerotier-idtool.1 | gzip -9 >/usr/share/man/man1/zerotier-idtool.1.gz
即安装完成
使用sudo zerotier-cli info查看是否安装完成。
大概会提示:
[root@idv-36f9d5 ZeroTierOne-master]# sudo zerotier-cli info
zerotier-cli: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by zerotier-cli)
zerotier-cli: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by zerotier-cli)
zerotier-cli: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.22' not found (required by zerotier-cli)
zerotier-cli: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by zerotier-cli)
这个错误,这个是因为之前安装gcc的时候旧的动态库没有更新的原因。
下面是解决方法
修复gcc动态库
使用strings /usr/lib64/libstdc++.so.6 | grep GLIBC
查看现有动态库。
[root@idv-36f9d5 ZeroTierOne-master]# strings /usr/lib64/libstdc++.so.6 | grep GLIBC
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.14
GLIBC_2.4
GLIBC_2.3.2
GLIBCXX_DEBUG_MESSAGE_LENGTH
可以发现刚好缺3.4.20版本的gcc动态库。
执行以下命令,查找编译gcc时生成的最新动态库:
输出:
[root@idv-36f9d5 ZeroTierOne-master]# find / -name "libstdc++.so*"
/etc/zerotier/build/gcc-6.3.0/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.22
/etc/zerotier/build/gcc-6.3.0/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/etc/zerotier/build/gcc-6.3.0/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
/etc/zerotier/build/gcc-6.3.0/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.22
/etc/zerotier/build/gcc-6.3.0/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/etc/zerotier/build/gcc-6.3.0/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
/etc/zerotier/build/gcc-6.3.0/prev-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.22
/etc/zerotier/build/gcc-6.3.0/prev-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/etc/zerotier/build/gcc-6.3.0/prev-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
/data/etc/zerotier/build/gcc-6.3.0/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.22
/data/etc/zerotier/build/gcc-6.3.0/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/data/etc/zerotier/build/gcc-6.3.0/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
/data/etc/zerotier/build/gcc-6.3.0/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.22
/data/etc/zerotier/build/gcc-6.3.0/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/data/etc/zerotier/build/gcc-6.3.0/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
/data/etc/zerotier/build/gcc-6.3.0/prev-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.22
/data/etc/zerotier/build/gcc-6.3.0/prev-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/data/etc/zerotier/build/gcc-6.3.0/prev-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
/usr/lib64/libstdc++.so.6
/usr/lib64/libstdc++.so.6.0.19
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.py
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.pyo
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.pyc
/usr/local/lib64/libstdc++.so.6
/usr/local/lib64/libstdc++.so
/usr/local/lib64/libstdc++.so.6.0.22
/usr/local/lib64/libstdc++.so.6.0.22-gdb.py
/usr/lib/gcc/x86_64-redhat-linux/4.8.2/libstdc++.so
/usr/lib/gcc/x86_64-redhat-linux/4.8.2/32/libstdc++.so
[root@idv-36f9d5 ZeroTierOne-master]#
其中/etc/zerotier/build/gcc-6.3.0/
是我之前编译所在目录
找关键词
/gcc-6.3.0/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.22
可以发现有
/etc/zerotier/build/gcc-6.3.0/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.22
使用
cp /etc/zerotier/build/gcc-6.3.0/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.22 /usr/lib64
复制后,修改系统默认动态库的指向,即:重建默认库的软连接。
切换工作目录至/usr/lib64
cd /usr/lib64
先确认下是否存在
[root@idv-36f9d5 lib64]# ll | grep libstdc++.so.6
lrwxrwxrwx 1 root root 19 2月 5 23:13 libstdc++.so.6 -> libstdc++.so.6.0.19
-rwxr-xr-x 1 root root 999944 11月 4 2016 libstdc++.so.6.0.19
-rwxr-xr-x 1 root root 11396352 2月 6 01:31 libstdc++.so.6.0.22
删除原来软连接:
rm -rf libstdc++.so.6
将默认库的软连接指向最新动态库:
ln -s libstdc++.so.6.0.22 libstdc++.so.6
默认动态库升级完成。重新运行以下命令检查动态库:
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
[root@idv-36f9d5 lib64]# strings /usr/lib64/libstdc++.so.6 | grep GLIBC
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.14
GLIBC_2.17
GLIBC_2.3.2
......
还有一堆东西我就省略了。
证实存在GLIBCXX_3.4.22
再次执行sudo zerotier-cli info
[root@idv-36f9d5 lib64]# sudo zerotier-cli info
zerotier-cli: missing port and zerotier-one.port not found in /var/lib/zerotier-one
[root@idv-36f9d5 lib64]#
确认一切正常。
使用zerotier-cli join xxxxxxx
加入,提示200即可。
如果还是提示:
zerotier-cli: missing port and zerotier-one.port not found in /var/lib/zerotier-one
那就执行
zerotier-one -d
即可。
(记得在zerotier后台允许这个设备并且勾上Allow Ethernet Bridging
)
使用ip a查看是否有被分配的ip
[root@idv-36f9d5 ZeroTierOne-master]# ip a
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:3d:33:e5 brd ff:ff:ff:ff:ff:ff
inet 192.168.123.179/24 brd 192.168.123.255 scope global dynamic eth0
valid_lft 76696sec preferred_lft 76696sec
3: virbr0: mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:a6:28:72 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
link/ether 52:54:00:a6:28:72 brd ff:ff:ff:ff:ff:ff
5: ztly5xszje: mtu 2800 qdisc pfifo_fast state UNKNOWN group default qlen 1000
link/ether d2:18:e9:a1:5b:6b brd ff:ff:ff:ff:ff:ff
inet 192.168.195.51/24 brd 192.168.195.255 scope global ztly5xszje
valid_lft forever preferred_lft forever
我这里是有的。
开机启动
由于安全考虑,系统开机启动修改并隐藏了systemctl监听目录
而我尝试了rc.local开机执行脚本失败与crontab -e保存不了配置后
想到了开机必会启动sshd,我可以用systemctl的联动机制。
首先进入之前zerotier编译目录
cd /etc/zerotier/zerotier/ZeroTierOne-master
然后使用
cp debian/zerotier-one.service /etc/systemd/system
官方的service文件。
sudo systemctl daemon-reload
sudo systemctl enable zerotier-one
sudo systemctl start zerotier-one
这里的enable没用,只不过是为了确保systemctl手动启动zerotier有效。
[root@idv-36f9d5 ZeroTierOne-master]# systemctl status zerotier-one
● zerotier-one.service - ZeroTier One
Loaded: loaded (/etc/systemd/system/zerotier-one.service; enabled; vendor preset: disabled)
Active: active (running) since 六 2021-02-06 01:41:58 CST; 6s ago
Main PID: 75682 (zerotier-one)
Tasks: 3
CGroup: /system.slice/zerotier-one.service
└─75682 /usr/sbin/zerotier-one
2月 06 01:41:58 idv-36f9d5 systemd[1]: Started ZeroTier One.
2月 06 01:41:58 idv-36f9d5 systemd[1]: Starting ZeroTier One...
然后编辑sshd的service
vi /usr/lib/systemd/system/sshd.service
添加一行
Wants=zerotier-one.service
这样在启动sshd时会联动启动zerotier
重新载入配置文件systemctl daemon-reload
,随后重启.
证实可以开机启动:
[root@idv-36f9d5 ~]# systemctl status zerotier-one
● zerotier-one.service - ZeroTier One
Loaded: loaded (/etc/systemd/system/zerotier-one.service; enabled; vendor preset: disabled)
Active: active (running) since 六 2021-02-06 01:50:44 CST; 55s ago
Main PID: 1764 (zerotier-one)
Tasks: 7
CGroup: /system.slice/zerotier-one.service
└─1764 /usr/sbin/zerotier-one
2月 06 01:50:44 idv-36f9d5 systemd[1]: Started ZeroTier One.
2月 06 01:50:44 idv-36f9d5 systemd[1]: Starting ZeroTier One...
2月 06 01:50:44 idv-36f9d5 zerotier-one[1764]: sendto: Network is unreachable
2月 06 01:50:44 idv-36f9d5 zerotier-one[1764]: WARNING: unable to write to file: /var/lib/zerotier-one/peers.d/0cccb752f7.peer (unable to open)
2月 06 01:51:14 idv-36f9d5 zerotier-one[1764]: WARNING: unable to write to file: /var/lib/zerotier-one/peers.d/0cccb752f7.peer (unable to open)
2月 06 01:51:14 idv-36f9d5 zerotier-one[1764]: WARNING: unable to write to file: /var/lib/zerotier-one/networks.d/0cccb752f7ce37d3.conf (unable to open)
自动配置网卡正常
[root@idv-36f9d5 ~]# ip a
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:3d:33:e5 brd ff:ff:ff:ff:ff:ff
inet 192.168.123.179/24 brd 192.168.123.255 scope global dynamic eth0
valid_lft 86311sec preferred_lft 86311sec
3: ztly5xszje: mtu 2800 qdisc pfifo_fast state UNKNOWN group default qlen 1000
link/ether d2:18:e9:a1:5b:6b brd ff:ff:ff:ff:ff:ff
inet 192.168.195.51/24 brd 192.168.195.255 scope global ztly5xszje
valid_lft forever preferred_lft forever
4: virbr0: mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:a6:28:72 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
5: virbr0-nic: mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
link/ether 52:54:00:a6:28:72 brd ff:ff:ff:ff:ff:ff
可以ping通服务器。
[root@idv-36f9d5 ~]# ping 192.168.195.110
PING 192.168.195.110 (192.168.195.110) 56(84) bytes of data.
64 bytes from 192.168.195.110: icmp_seq=1 ttl=64 time=2.09 ms
64 bytes from 192.168.195.110: icmp_seq=2 ttl=64 time=2.44 ms
64 bytes from 192.168.195.110: icmp_seq=3 ttl=64 time=2.92 ms
64 bytes from 192.168.195.110: icmp_seq=4 ttl=64 time=2.22 ms
64 bytes from 192.168.195.110: icmp_seq=5 ttl=64 time=2.27 ms
64 bytes from 192.168.195.110: icmp_seq=6 ttl=64 time=2.37 ms
有
2月 06 01:50:44 idv-36f9d5 zerotier-one[1764]: WARNING: unable to write to file: /var/lib/zerotier-one/peers.d/0cccb752f7.peer (unable to open)
2月 06 01:51:14 idv-36f9d5 zerotier-one[1764]: WARNING: unable to write to file: /var/lib/zerotier-one/peers.d/0cccb752f7.peer (unable to open)
2月 06 01:51:14 idv-36f9d5 zerotier-one[1764]: WARNING: unable to write to file: /var/lib/zerotier-one/networks.d/0cccb752f7ce37d3.conf (unable to open)
报错,目前来看不影响使用,可能是记录被分配的ip以及预存内网ip/arp之内的。是因为开机后根目录又只读了。
目前来看不影响使用,但看起来不舒服。
开机根目录可写
为了永久生效,我就写一个脚本
#!/bin/sh
mount -o remount,rw /
保存为rw.sh
,我存放为/root/rwdisk.sh
chmod 755 /root/rwdisk.sh
然后创建开机执行
/etc/systemd/system/rwdisk.service
[Unit]
Description=rwdisk
[Service]
ExecStart=/root/rwdisk.sh
[Install]
WantedBy=multi-user.target
随后常规操作
systemctl daemon-reload
systemctl enable zerotier-one
systemctl start zerotier-one
然后在zerotier-one.service
添加
Wants=rwdisk.service
如下所示:
[root@idv-36f9d5 ~]# cat /etc/systemd/system/zerotier-one.service
[Unit]
Description=ZeroTier One
After=network-online.target
Wants=network-online.target
Wants=rwdisk.service
[Service]
ExecStart=/usr/sbin/zerotier-one
Restart=always
KillMode=process
[Install]
WantedBy=multi-user.target
然后systemctl daemon-reload
,重启后查看/
根目录是否可写.
[root@idv-36f9d5 ~]# findmnt
TARGET SOURCE FSTYPE OPTIONS
/ /dev/sda5 ext4 rw,relatime,data=ordered
... ...
zerotier也没报无法写入错了
[root@idv-36f9d5 ~]# systemctl status zerotier-one
● zerotier-one.service - ZeroTier One
Loaded: loaded (/etc/systemd/system/zerotier-one.service; enabled; vendor preset: disabled)
Active: active (running) since 日 2021-02-07 02:02:19 CST; 2min 14s ago
Main PID: 1116 (zerotier-one)
Tasks: 7
CGroup: /system.slice/zerotier-one.service
└─1116 /usr/sbin/zerotier-one
2月 07 02:02:19 idv-36f9d5 systemd[1]: Started ZeroTier One.
2月 07 02:02:19 idv-36f9d5 systemd[1]: Starting ZeroTier One...
2月 07 02:02:19 idv-36f9d5 zerotier-one[1116]: sendto: Network is unreachable
延时
在上面又出现新的问题
zerotier-one[1116]: sendto: Network is unreachable
需要在启动的时候延时一下,添加:
ExecStartPre=/bin/sleep 10
即可
如下所示
[root@idv-36f9d5 ~]# cat /etc/systemd/system/zerotier-one.service
[Unit]
Description=ZeroTier One
After=network-online.target
Wants=network-online.target
Wants=rwdisk.service
[Service]
ExecStartPre=/bin/sleep 10
ExecStart=/usr/sbin/zerotier-one
Restart=always
KillMode=process
[Install]
WantedBy=multi-user.target
延时10s,就没错误了。
出现这个原因是因为要等待系统配置完成网卡与分区状态。
参考:
噢易技术知识库
Centos7离线安装gcc
CentOS7升级GCC4.9.3
Ubuntu 离线安装gcc (非root用户)
CentOS 查看系统 CPU 个数、核心数、线程数
zerotier/ZeroTierOne
Raspberry Pi 编译安装 ZeroTier
解决类似 /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found 的问题
此处评论已关闭