由于公司项目的需求,需要在中标麒麟上部署我们监控平台应用,以满足市场所谓的国产自主安全操作系统开展业务的需求。
由于原项目在Debian8.7桌面系统上开发,项目准备在中标麒麟桌面系统上试试水,预计直接运行在中标麒麟中会遇到不少问题。因此,将部署过程记录下来,以供后续工作参考。
在中标麒麟官网(http://www.cs2c.com.cn/index.php?id=177)上登记了自己信息,准备申请一个个人试用版的中标麒麟桌面系统,等到将来测试成功了,再购买标准版的系统商用。登记了快一个月了,无人应答!唉,算了,人家看不上我们这种中小企业的民用市场。于是,上网搜索到一个连接https://www.7down.com/soft/285010.html,到他指定网盘下载,说是8.0,实际上安装才知道是6.0,算了,有总比没有好!
我把系统安装在虚拟机中,安装过程基本上与安装别的linux没啥差异,一路绿灯,就不提了。关键是后续的设置与部署跳坑,下文分解。
看看这款神奇操作系统的用户界面:
跟ubuntu、debian一样,默认情况下都是不允许root登陆图形界面的。因此,第一步先打开root登陆的权限。
1、打开终端,输入 su -,然后输入root密码进入root权限
2、使用vim打开 /etc/pam.d/gdm 和 /etc/pam.d/gdm-password文件,将两个文件中的
auth required pam_succeed_if.so user != root quiet 注释掉就行(此行最前边加#即可),实际操作中,发现gdm这个文件没有,不用管了。
3、注销,然后使用root用户登录图形界面,成功!
遇到的第一个坑,运行 yum update 无法连接上源。
安装iso里的更新源竟然不是官方的,或者说配错了。上网搜索了一下官方源,改掉!
vi /etc/yum.repos.d/neokylin.repo
baseurl改为:http://download.cs2c.com.cn/neokylin/desktop/releases/6.0/i386/os/
同理
vi /etc/yum.repos.d/neokylin-updates.repo
baseurl改为:http://download.cs2c.com.cn/neokylin/desktop/updates/6.0/i386/os/
yum update 或者
yum update --skip-broken //使用后者是因为报错,好像也没卵用
直接运行我们之前在debian8.7上编译的后台程序,发现报错:
/lib/libstdc++.so.6: version `GLIBCXX_3.4.20' not found
于是查看动态库:
strings /usr/lib/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
GLIBC_2.3
GLIBC_2.0
GLIBC_2.4
GLIBC_2.1
GLIBC_2.1.3
GLIBC_2.3.2
GLIBC_2.2
GLIBCXX_DEBUG_MESSAGE_LENGTH
确实没有GLIBCXX_3.4.20
上网搜索了一下gcc版本与libstdc++.so的关系:
GCC 4.9.0: libstdc++.so.6.0.20
GCC 5.1.0: libstdc++.so.6.0.21
GCC 6.1.0: libstdc++.so.6.0.22
GCC 7.1.0: libstdc++.so.6.0.23
GCC 7.2.0: libstdc++.so.6.0.24
GCC 8.0.0: libstdc++.so.6.0.25
至少要升级到4.9.0,我们的程序是在4.9.2的debian8.7默认编译器,因此只能升级gcc。
首先:
从官方源升级下gcc,看能不能直接到gcc-4.9.0以上,
yum install gcc
一番更新之后,发现gcc由4.7.1变成了4.8.1,还是没有达到4.9的要求。
于是决定下载源码进行编译安装。
一、源码编译安装gcc-4.9.2
1、下载gcc源码包
Download (HTTP): http://ftp.gnu.org/gnu/gcc/gcc-4.9.2/gcc-4.9.2.tar.gz
2、解压压缩包
[root@localhost tmp]# cd /usr/local/
[root@localhost local]# tar -zxvf gcc-4.9.2.tar.gz
3、下载编译所需的依赖包
[root@localhost local]# cd gcc-4.9.2
[root@localhost gcc-4.9.2]# ./contrib/download_prerequisites
如果虚拟机不能联网,只能手工下载了。参考./contrib/download_prerequisites脚本里面的内容,一步步操作。
4、编译:
./configure --prefix=/usr/local/gcc --enable-bootstrap --enable-checking=release --enable-languages=c,c++ --disable-multili
make -j4
make install
make过程中报错:
configure: error: no usable dependency style found
make[2]: *** [configure-stage1-gcc] 错误 1
make[2]: 离开目录“/usr/local/gcc-4.9.2”
make[1]: *** [stage1-bubble] 错误 2
make[1]: 离开目录“/usr/local/gcc-4.9.2”
make: *** [all] 错误 2
查看config.log
gcc version 4.8.1 20130603 (NeoKylin 4.8.1-1) (GCC)
configure:4249: $? = 0
configure:4238: gcc -V >&5
gcc: error: unrecognized command line option '-V'
gcc: fatal error: no input files
compilation terminated.
configure:4249: $? = 4
configure:4238: gcc -qversion >&5
gcc: error: unrecognized command line option '-qversion'
gcc: fatal error: no input files
搜索了以上信息,可能与autoconf和binutils库太旧了有关,于是继续把网上收集来的需要安装的包都给装上,如下:
yum install -y gcc-c++ glibc-static //为避免出错建议安装此包
yum install autoconf
yum install binutils
再次编译,出现了长长跑马,静待编译完成。
[root@localhost gcc]# /usr/local/gcc/bin/gcc -v
使用内建 specs。
COLLECT_GCC=/usr/local/gcc/bin/gcc
COLLECT_LTO_WRAPPER=/usr/local/gcc/libexec/gcc/i686-pc-linux-gnu/4.9.2/lto-wrapper
目标:i686-pc-linux-gnu
配置为:./configure --prefix=/usr/local/gcc --enable-bootstrap --enable-checking=release --enable-languages=c,c++ --disable-multilibls
线程模型:posix
gcc 版本 4.9.2 (GCC)
编译成功了。
#strings /usr/local/gcc/lib/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
GLIBC_2.3
GLIBC_2.0
GLIBC_2.1
GLIBC_2.17
GLIBC_2.1.3
GLIBC_2.3.2
GLIBC_2.2
GLIBCXX_DEBUG_MESSAGE_LENGTH
终于看到GLIBCXX_3.4.20
加入到PATH环境变量中:
[root@localhost gcc-build]# gcc --version
gcc (GCC) 4.8.1 20130603 (NeoKylin 4.8.1-1)
Copyright © 2013 Free Software Foundation, Inc.
本程序是自由软件;请参看源代码的版权声明。本软件没有任何担保;
包括没有适销性和某一专用目的下的适用性担保。
[root@localhost gcc-build]# vi /etc/profile.d/gcc.sh
export PATH=/usr/local/gcc/bin:$PATH
[root@localhost gcc-build]# source /etc/profile.d/gcc.sh
[root@localhost gcc-build]# gcc --version
gcc (GCC) 4.9.2
Copyright © 2014 Free Software Foundation, Inc.
本程序是自由软件;请参看源代码的版权声明。本软件没有任何担保;
包括没有适销性和某一专用目的下的适用性担保。
导出头文件:
[root@localhost gcc-4.9.2]# ln -sv /usr/local/gcc/include/ /usr/include/gcc
"/usr/include/gcc" -> "/usr/local/gcc/include/"
导出库:
[root@localhost gcc-4.9.2]# vim /etc/ld.so.conf.d/gcc.conf
/usr/local/gcc/lib
[root@localhost gcc-4.9.2]# ldconfig -v
[root@localhost gcc-4.9.2]# ldconfig -p |grep gcc //验证是否导出
至此,gcc升级到4.9.2成功。
此时,跑之前的应用程序,启动正常!