0
点赞
收藏
分享

微信扫一扫

Rocky基础之软件包3-编译安装

3程序包编译

源码编译介绍

程序包编译安装: 源代码-->预处理-->编译-->汇编-->链接-->执行 多文件:文件中的代码之间,很可能存在跨文件依赖关系 虽然有很多开源软件将软件打成包,供人们使用,但并不是所有源代码都打成包,如果想使用开源软件,可能需要自已下载源码,进行编译安装。另外即使提供了包,但是生产中需要用于软件的某些特性,仍然需要自行编译安装。但是利用源代码编译安装是比较繁琐的,庆幸的是有相关的项目管理工具可以大大减少编译过程的复杂度

开源程序源代码的获取

3.1、C 语言源代码编译安装过程

利用编译工具,通常只需要三个大的步骤
./configure
(1) 通过选项传递参数,指定安装路径、启用特性等;执行时会参考用户的指定以及Makefile.in文件生成Makefile
(2) 检查依赖到的外部环境,如依赖的软件包
make 根据Makefile文件,会检测依赖的环境,进行构建应用程序
make install 复制文件到相应路径
注意:安装前可以通过查看README,INSTALL获取帮助

3.2、 编译安装准备

准备:安装相关的依赖包
开发工具:make, gcc (c/c++编译器GNU C Complier)
开发环境:开发库(glibc:标准库),头文件,可安装开发包组 Development Tools软件相关依赖包
生产实践:基于最小化安装的系统建议安装下面相关包
yum install gcc make autoconf gcc-c++ glibc glibc-devel pcre pcre-devel openssl
openssl-devel systemd-devel zlib-devel vim lrzsz tree tmux lsof tcpdump wget
net-tools iotop bc bzip2 zip unzip nfs-utils man-page

3.3、编译安装

第一步:运行 configure 脚本,生成 Makefile 文件 其选项主要功能: 可以指定安装位置 指定启用的特性 获取其支持使用的选项 ./configure --help

安装路径设定 --prefix=/PATH:指定默认安装位置,默认为/usr/local/ --sysconfdir=/PATH:配置文件安装位置 System types:支持交叉编译 软件特性和相关指定: Optional Features: 可选特性 --disable-FEATURE --enable-FEATURE[=ARG] Optional Packages: 可选包 --with-PACKAGE[=ARG] 依赖包 --without-PACKAGE 禁用依赖关系 注意:通常被编译操作依赖的程序包,需要安装此程序包的"开发"组件,其包名一般类似于name- devel-VERSION

第二步:make

第三步:make install

3.4、安装后的配置
  1. 二进制程序目录导入至PATH环境变量中 编辑文件/etc/profile.d/NAME.sh

export PATH=/PATH/TO/BIN:$PATH

  1. 相关用户及文件 有些开源软件编译完成后,还需要创建相关的用户及文件
  2. 导入帮助手册 编辑/etc/man.config|man_db.conf文件,添加一个MANPATH
3.5、下载并编译安装新版 tree

[root@rocky8 tree-2.0.2]# yum install make gcc #提前安装好gcc和make ,编译需要这两个程序

官网下载 http://mama.indstate.edu/users/ice/tree/
[root@rocky8 ~]# tar xf tree-2.0.2.tgz
[root@rocky8 ~]# mv tree-2.0.2 /usr/local/src/
[root@rocky8 ~]# cd /usr/local/src/
[root@rocky8 src]# ls
tree-2.0.2
[root@rocky8 tree-2.0.2]# grep "2.0.2" *
CHANGES:Version 2.0.2 (02/16/2022)
color.c: { euc_jp, "\250\242 ", "\250\247", "\250\246", "(c)",
color.c: { koi8ru, "\201 ", "\206\200\200", "\204\200\200", "\277",
grep: doc: Is a directory
Makefile:VERSION=2.0.2
tree.c:char *version ="$Version: $ tree v2.0.2 (c) 1996 - 2022 by Steve Baker, Thomas Moore, Francesc Rocher, Florian Sesser, Kyosuke Tokoro $";
tree.c:char *hversion="\t\t tree v2.0.2 %s 1996 - 2022 by Steve Baker and Thomas Moore <br>\n"

[root@rocky8 tree-2.0.2]# sed -i "s/2.0.2/8.8.8/" tree.c

[root@rocky8 tree-2.0.2]# sed -i "s/2.0.2/8.8.8/" Makefile
[root@rocky8 tree-2.0.2]# make -j 2
gcc -O3 -pedantic -Wall -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c -o tree.o tree.c
gcc -O3 -pedantic -Wall -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c -o list.o list.c
gcc -O3 -pedantic -Wall -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c -o hash.o hash.c
gcc -O3 -pedantic -Wall -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c -o color.o color.c
gcc -O3 -pedantic -Wall -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c -o file.o file.c
gcc -O3 -pedantic -Wall -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c -o filter.o filter.c
gcc -O3 -pedantic -Wall -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c -o info.o info.c
gcc -O3 -pedantic -Wall -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c -o unix.o unix.c
gcc -O3 -pedantic -Wall -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c -o xml.o xml.c
gcc -O3 -pedantic -Wall -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c -o json.o json.c
gcc -O3 -pedantic -Wall -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c -o html.o html.c
gcc -O3 -pedantic -Wall -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c -o strverscmp.o strverscmp.c
gcc -s -o tree tree.o list.o hash.o color.o file.o filter.o info.o unix.o xml.o json.o html.o strverscmp.o
[root@rocky8 tree-2.0.2]# make install
install -d /usr/local/bin
install -d /usr/local/man/man1
install tree /usr/local/bin/tree; \
install -m 644 doc/tree.1 /usr/local/man/man1/tree.1
[root@rocky8 bin]# /usr/local/bin/tree --version
tree v8.8.8 (c) 1996 - 2022 by Steve Baker, Thomas Moore, Francesc Rocher, Florian Sesser, Kyosuke Tokoro

## 因为安装到了/usr/local/bin目录下,默认path环境变量在/usr/bin/的前边,所以可以直接运行此版本,而老版本的tree需要写全路径,也就是/usr/bin/tree
## 如果安装在其他目录下,需要自己增加环境变量或者创建软连接
法1: echo 'PATH=/apps/tree/bin:$PATH' > /etc/profile.d/tree.sh
法2: export PATH="/apps/tree/bin:$PATH"
法3: ln -s /apps/tree/bin/tree /usr/local/bin
## 如果默认无法查看man,需要自己添加到/etc/man_db.conf
法:vim /etc/man_db.conf
MANDATORY_MANPATH /apps/tree/man

3.6、编译安装 cmatrix

#下载链接:https://github.com/abishekvashok/cmatrix

[root@rocky8-1 ~]# dnf -y install gcc make autoconf ncurses-devel #安装准备依赖包
[root@rocky8-1 ~]# tar xf cmatrix-v2.0-Butterscotch.tar #解压
[root@rocky8-1 ~]# cd cmatrix/
[root@rocky8-1 ~]# ./configure
[root@rocky8-1 ~]# make
[root@rocky8-1 ~]# make install

3.7、源码编译安装httpd-2.4-54

#下载链接:https://downloads.apache.org/httpd/httpd-2.4.54.tar.gz
[root@rocky8-2 httpd-2.4.54]# ./configure --prefix=/data/httpd --sysconfdir=/etc/httpd --enable-ssl #编译
...
configure: error: APR not found. Please read the documentation. #找不到apr 😑
[root@rocky8-2 httpd-2.4.54]# yum search apr
[root@rocky8-2 httpd-2.4.54]# yum install apr-devel #一般都是安装后边带有devel的开发包
[root@rocky8-2 httpd-2.4.54]# ./configure --prefix=/data/httpd --sysconfdir=/etc/httpd --enable-ssl #再次编译
...
configure: error: APR-util not found. Please read the documentation. #找不到apr-util😫

[root@rocky8-2 httpd-2.4.54]# yum install apr-util-devel #t同上search后安装带有devel的包
[root@rocky8-2 httpd-2.4.54]# ./configure --prefix=/data/httpd --sysconfdir=/etc/httpd --enable-ssl #再次编译
...
checking for gcc... gcc #没有安装gcc,所以报错
checking whether the C compiler works... no
configure: error: in `/usr/local/src/httpd-2.4.54':
configure: error: C compiler cannot create executables
See `config.log' for more details
[root@rocky8-2 httpd-2.4.54]# yum install gcc #安装gcc
[root@rocky8-2 httpd-2.4.54]# ./configure --prefix=/data/httpd --sysconfdir=/etc/httpd --enable-ssl #再次编译
...
configure: error: pcre(2)-config for libpcre not found. PCRE is required and available from http://pcre.org/ ##找不到pcre 😓
[root@rocky8-2 httpd-2.4.54]# yum install pcre-devel #t同上search后安装带有devel的包
[root@rocky8-2 httpd-2.4.54]# ./configure --prefix=/data/httpd --sysconfdir=/etc/httpd --enable-ssl #再次编译
...
configure: WARNING: OpenSSL version is too old #找不到Openssl
no
checking whether to enable mod_ssl... configure: error: mod_ssl has been requested but can not be built due to prerequisite failures
[root@rocky8-2 httpd-2.4.54]# yum install openssl-devel
[root@rocky8-2 httpd-2.4.54]# ./configure --prefix=/data/httpd --sysconfdir=/etc/httpd --enable-ssl #再次编译
...
Server Version: 2.4.54
Install prefix: /data/httpd
C compiler: gcc
CFLAGS: -pthread
CPPFLAGS: -DLINUX -D_REENTRANT -D_GNU_SOURCE
LDFLAGS:
LIBS:
C preprocessor: gcc -E
## nice! 完美编译 😁😁😁😁😁
[root@rocky8-2 httpd-2.4.54]# make -j 2 #双CPU运行,检查依赖性
-bash: make: command not found #尴尬,没有安装make程序😂

[root@rocky8-2 httpd-2.4.54]# yum install make
[root@rocky8-2 httpd-2.4.54]# make -j 2 #再来
....
gcc: error: /usr/lib/rpm/redhat/redhat-hardened-ld: No such file or directory
make[4]: *** [/usr/local/src/httpd-2.4.54/modules/aaa/modules.mk:2: mod_authn_file.la] Error 1
make[4]: *** Waiting for unfinished jobs....
gcc: error: /usr/lib/rpm/redhat/redhat-hardened-ld: No such file or directory
make[4]: *** [/usr/local/src/httpd-2.4.54/modules/aaa/modules.mk:4: mod_authn_dbm.la] Error 1
make[4]: Leaving directory '/usr/local/src/httpd-2.4.54/modules/aaa'
make[3]: *** [/usr/local/src/httpd-2.4.54/build/rules.mk:117: shared-build-recursive] Error 1
make[3]: Leaving directory '/usr/local/src/httpd-2.4.54/modules/aaa'
make[2]: *** [/usr/local/src/httpd-2.4.54/build/rules.mk:117: shared-build-recursive] Error 1
make[2]: Leaving directory '/usr/local/src/httpd-2.4.54/modules'
make[1]: *** [/usr/local/src/httpd-2.4.54/build/rules.mk:117: shared-build-recursive] Error 1
make[1]: Leaving directory '/usr/local/src/httpd-2.4.54'
make: *** [/usr/local/src/httpd-2.4.54/build/rules.mk:75: all-recursive] Error 1

### 我了个。。。又报错。😫😫
[root@rocky8-2 httpd-2.4.54]# yum search redhat
[root@rocky8-2 httpd-2.4.54]# yum install redhat-rpm-config ##革命需要啥,我们就做啥
[root@rocky8-2 httpd-2.4.54]# make -j 2 #再来
## nice! 完美通过
[root@rocky8-2 httpd-2.4.54]# make install #复制文件到特定目录
...
mkdir /etc/httpd
mkdir /etc/httpd/extra
mkdir /etc/httpd/original
mkdir /etc/httpd/original/extra
Installing HTML documents
mkdir /data/httpd/htdocs
Installing error documents
mkdir /data/httpd/error
Installing icons
mkdir /data/httpd/icons
mkdir /data/httpd/logs
Installing CGIs
mkdir /data/httpd/cgi-bin
Installing header files
mkdir /data/httpd/include
Installing build system files
mkdir /data/httpd/build
Installing man pages and online manual
mkdir /data/httpd/man
mkdir /data/httpd/man/man1
mkdir /data/httpd/man/man8
mkdir /data/httpd/manual
make[1]: Leaving directory '/usr/local/src/httpd-2.4.54'
## nice! 完美安装

# 关闭防火墙和selinux 方法省略

[root@rocky8-2 bin]# echo 'PATH=/data/httpd/bin:$PATH' > /etc/profile.d/httpd.sh #配置环境变量 :千万注意不要少写$,如果少写$的话,很多命令就找不到环境变量,而导致命令无法使用,如ls,reboot等等都不能用了。
[root@rocky8-2 bin]# . /etc/profile.d/httpd.sh #source 生效
[root@rocky8-2 bin]# apachectl start #启动httpd
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using rocky8-2.magedu.org. Set the 'ServerName' directive globally to suppress this message
httpd (pid 33664) already running

## 指定apache用户
[root@rocky8-2 ~]# useradd -r -s /sbin/nologin -d /var/www -c "Apache" -u 48 apache
[root@rocky8-2 ~]# getent passwd apache
apache:x:48:48:Apache:/var/www:/sbin/nologin
[root@rocky8-2 ~]# vim /etc/httpd/httpd.conf
user apache
group apache

举报

相关推荐

0 条评论