linux 内核 三天吐血,编译安装——吐血经验,内附脚本
程序包编译安装:
源码包:name-VERSION-release.src.rpm
rpm由源码包安装后,使用rpmbuild命令制作成二进制格式的rpm包,而后再安装
源代码–> 预处理–> 编译(gcc)–> 汇编–> 链接–> 执行
源代码组织格式:
多文件:文件中的代码之间,很可能存在跨文件依赖关系
C 、C++ :make ( 项目管理器,configure –> Makefile.in –> makefile)
java: maven
C代码编译安装三步骤:
1、./configure:
(1)通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及makefile.in 文件生成makefile
(2)检查依赖到的外部环境
2、make:
根据makefile文件,构建应用程序
3、make install:
复制文件到相应路径
开发工具:
autoconf:生成configure 脚本
automake:生成Makefile.in
注意:安装前查看INSTALL,README
开源程序源代码的获取:
官方自建站点:
apache.org (ASF)
mariadb.org
…
代码托管:
SourceForge.net
Github.com
code.google.com
c/c++ 编译器: gcc (GNU C Complier)
编译C源代码:
前提:提供开发工具及开发环境
开发工具:make, gcc等
开发环境:开发库,头文件
glibc:标准库
通过“包组”提供开发组件
CentOS:
"Development Tools",
"Server Platform Development"
第一步:configure 脚本
选项:指定安装位置、指定启用的特性
–help:获取其支持使用的选项(进入到解压的文件中执行命令)
选项分类:
安装路径设定:
–prefix=/PATH:指定默认安装位置, 默认为/usr/local/
–sysconfdir=/PATH:配置文件安装位置
Optional Features:可选特性
–disable-FEATURE
–enable-FEATURE[=ARG]
Optional Packages:可选包,
–with-PACKAGE[=ARG], 依赖包
–without-PACKAGE, 禁用依赖关系
第二步:make
第三步:make install
安装后的配置:
(1) 二进制程序目录导入至PATH 环境变量中;
编辑文件/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
(2) 导入库文件路径
编辑/etc/ld.so.conf.d/NAME.conf
添加新的库文件所在目录至此文件中;
让系统重新生成缓存:
ldconfig [-v]
(3)导入头文件
基于链接的方式导出头文件至/usr/include文件中
2种实现方式,导出整个目录为1个符号链接,导出每个文件为符号链接
ln -sv
(4)导入帮助手册
编辑/etc/man.config|man_db.conf 文件
添加一个MANPATH
注以下shell脚本问自己手动编写,如若出现任何问题,本人概不负责
编译安装后自动配置脚本:(自动完成上述4步操作)
#!/bin/bash
#desricptino auto make dir of configue make make install
#version 0.1
#author gaomeng
#date 20160822
#
read -p "Please input service dir path: " dir
//检测该目录是否存在,不存在则报错,退出
if [ -e $dir ];then
echo "dir is exist."
else
echo "dir is not exist."
exit
fi
bindir=$dir/bin
libdir=$dir/lib
includedir=$dir/include
mandir=$dir/man
//检测该目录下的bin,lib,include,man目录是否存在,不存在则报错,退出
if [ -e $bindir ];then
echo "bin dir is exist."
else
echo "bin dir is not exist."
exit
fi
if [ -e $libdir ];then
echo "lib dir is exist."
else
echo "lib dir is not exist."
exit
fi
if [ -e $includedir ];then
echo "include dir is exist."
else
echo "include dir is not exist."
exit
fi
if [ -e $mandir ];then
echo "man dir is exist."
else
echo "man dir is not exist."
exit
fi
name=`basename $dir`
//检测对应目录下(/etc/profile.d/ ,/etc/ld.so.conf.d/ ,/usr/include/)的以路径基名为文件名的文件是否存在,存在则报错,退出
if [ -e /etc/profile.d/$name.sh ]; then
echo "/etc/profile.d/${name}.sh is exist."
exit
else
touch /etc/profile.d/${name}.sh
echo "PATH=$bindir:$PATH" >> /etc/profile.d/${name}.sh
echo "/etc/profile.d/${name}.sh add success."
echo -e "\033[42;31mplease execute: source /etc/profile.d/http.sh\033[0m"
fi
if [ -e /etc/ld.so.conf.d/${name}.conf ]; then
echo "/etc/ld.so.conf.d/${name}.conf is exist."
exit
else
echo "$libdir" >> /etc/ld.so.conf.d/${name}.conf
ldconfig
echo "/etc/ld.so.conf.d/${name}.conf add success."
fi
if [ -e /usr/include/${name} ]; then
echo "/usr/include/${name} is exist."
exit
else
ln -sv $includedir /usr/include/${name}
echo "/usr/include/${name} add success."
fi
//向/etc/man.config文件中最近一条man帮助文件路径
echo "MANPATH $mandir" >> /etc/man.config
echo "$mandir add in /etc/man.config."
自动卸载脚本:(自动删除上述4步所建目录和安装文件目录)
#!/bin/bash
#description auto del service configue file and service file
#version 0.1
#auther gaomeng
#date 20160823
#
read -p "Please input service dir path: " dir
//检测该目录是否存在,不存在则报错
if [ -e $dir ];then
echo "dir is exist."
else
echo "dir is not exist."
read -p "you want go or exit,please input " ans
case $ans in
[yY]|[yY][sS][eE])
;;
[nN]|[nN][oO])
exit;;
*)
exit;;
esac
fi
name=`basename $dir`
//检测对应目录下(/etc/profile.d/ ,/etc/ld.so.conf.d/ ,/usr/include/)的以路径基名为文件名的文件是否存在,存在则删除文件,不存在则退出
if [ -e /etc/profile.d/$name.sh ]; then
rm -f /etc/profile.d/${name}.sh
echo "/etc/profile.d/${name}.sh is deleted."
else
echo "/etc/profile.d/${name}.sh is not exist."
fi
if [ -e /etc/ld.so.conf.d/${name}.conf ]; then
rm -f /etc/ld.so.conf.d/${name}.conf
echo "/etc/ld.so.conf.d/${name}.conf is deletes."
else
echo "/etc/ld.so.conf.d/${name}.conf is not exist."
fi
if [ -e /usr/include/${name} ]; then
rm -f /usr/include/${name}
echo "/usr/include/${name} is deletes."
else
echo "/usr/include/${name} is exist."
fi
//删除/etc/man.config文件中的该服务的man帮助路径
sed -i "s@MANPATH /usr/local/${name}/man@@" /etc/man.config
fgrep "s@MANPATH /usr/local/${name}/man@@" /etc/man.config
echo "${name}/man delete from /etc/man.config."
//删除该服务文件
rm -rf $dir
作业:源码安装http2.2.29
[root@CentOS6 ~]# lftp 10.1.0.1/pub //下载源码包
cd ok, cwd=/pub
lftp 10.1.0.1:/pub> cd Sources/sources/httpd/
lftp 10.1.0.1:/pub/Sources/sources/httpd> get httpd-2.2.29.tar.bz2
5625498 bytes transferred
lftp 10.1.0.1:/pub/Sources/sources/httpd> bye
[root@CentOS6 ~]# tar xf httpd-2.2.29.tar.bz2 //解压源码包
[root@CentOS6 ~]# cd httpd-2.2.29
[root@CentOS6 httpd-2.2.29]# ./configure prefix=/usr/local/apache2 //安装3步骤
[root@CentOS6 httpd-2.2.29]# make
[root@CentOS6 httpd-2.2.29]# make install
[root@CentOS6 httpd-2.2.29]# which apachectl //apachectl的二进制程序路径
/usr/sbin/apachectl
[root@CentOS6 httpd-2.2.29]# /root/makeautoadd.sh //执行编译安装后自动配置脚本
Please input service dir path: /usr/local/apache2
dir is exist.
bin dir is exist.
lib dir is exist.
include dir is exist.
man dir is exist.
please execute: source /etc/profile.d/http.sh
/etc/profile.d/apache2.sh add success.
/etc/ld.so.conf.d/apache2.conf add success.
`/usr/include/apache2' -> `/usr/local/apache2/include'
/usr/include/apache2 add success.
/usr/local/apache2/man add in /etc/man.config.
[root@CentOS6 httpd-2.2.29]# source /etc/profile.d/apache2.sh
[root@CentOS6 httpd-2.2.29]# which apachectl //apachectl的二进制程序路径改变了
/usr/local/apache2/bin/apachectl
[root@CentOS6 httpd-2.2.29]# echo "ServerName localhost:80" >> /usr/local/apache2/conf/httpd.conf
[root@CentOS6 httpd-2.2.29]# apachectl start //启动服务
[root@CentOS6 httpd-2.2.29]# ip addr show eth0
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:dd:9f:c8 brd ff:ff:ff:ff:ff:ff
inet 10.1.143.1/8 brd 10.255.255.255 scope global eth0 //ip地址
inet6 fe80::20c:29ff:fedd:9fc8/64 scope link
valid_lft forever preferred_lft forever
服务启动成功
原创文章,作者:megedugao,如若转载,请注明出处:http://www.178linux.com/39210
linux 内核 三天吐血,编译安装——吐血经验,内附脚本相关推荐
- linux内核配置与编译,LINUX内核的配置与编译、安装
LINUX内核的配置与编译.安装 平台为VM RHEL 5.1 SERVER,所用的内核为linux-2.6.25. 可以到上下载相应的内核版本. 解压压缩包,并进入内核目录.下面是具体的步骤: 1. ...
- Linux内核的配置和编译
文章目录 前言 1.内核介绍 2.linux内核源码目录结构 3.内核配置和编译实验 4.内核的配置原理 5.menuconfig 6.Kconfig文件详解 7.menuconfig的实验 前言 以 ...
- linux内核基础和配置编译原理
2020-8-8 星期六 北京 闷热天 总结linux内核基础和配置编译原理,分两部分总结.仅作为技术积累,方便日后查阅.参考了网上的一些笔记. 第一部分:内核基础 2.14.1.内核和发行版的区别 ...
- 文件系统层次结构标准和Linux上下载源代码配置编译安装
一.文件系统层次结构标准 FHS_3.0 标准文档 /bin 存储一些二进制可执行命令文件, /usr/bin 也存放了一些基于用户的命令文件. /sbin 存储了很多系统命令, /usr/sbin ...
- linux环境手动编译安装Nginx实践过程 附异常解决
linux环境手动编译安装Nginx实践过程 附异常解决 参考文章: (1)linux环境手动编译安装Nginx实践过程 附异常解决 (2)https://www.cnblogs.com/david9 ...
- Linux 之旅 21:编译安装软件
Linux 之旅 21:编译安装软件 图源:pexcel 开源软件的安装与升级 可执行文件 通常,源代码只有被编译成二进制的可执行文件后才能在操作系统上被用户直接运行,比如: [icexmoon@xy ...
- linux内核2.6.35编译过程
一.实验目的 学习重新编译Linux内核,理解.掌握Linux内核和发行版本的区别. 二.实验内容 在Linux操作系统环境下重新编译内核.实验主要内容: A. 查找并且下载一份内核源代码,本实验使用 ...
- Linux下通过源码编译安装程序
本文简单的记录了下,在Linux下如何通过源码安装程序,以及相关的知识. 一.程序的组成部分 Linux下程序大都是由以下几部分组成: 二进制文件:也就是可以运行的程序文件 库文件:就是通常我们见到的 ...
- linux内核 mpls,将MPLS编译进linux内核中
系统环境:linux kernel 2.6.35.(此环境是上一篇文章中将ubuntu内核替换后的环境) 编译过程如下: 1)首先需要下载patch文件:linux-kernel-v2.6.35-mp ...
最新文章
- 着手一个手游项目的思考
- Old News PDC2003
- Webpack飞行手册
- androidsettitle方法_在Android应用程序中,Toolbar.setTitle方法无效-应用程序名称显示为标题...
- FineUICore(基础版)v5.4.0已发布!
- Redis布隆过滤器
- el-input 输入框类型;只能输入数字的输入框;保留两位小数输入框;只能输入正整数和0的输入框;手机号正则校验;车牌号码正则校验
- i红枣 建议:程序员要多吃点红枣
- 入门级图论算法:洪水填充算法
- android 系统优化(20)---MTK 平台唤醒时间优化1
- [下载]Internet Explorer 9 预览版
- 第三章、获取书籍信息
- Java 异常 (Exception) 剖析 与 用户自定义异常
- ssh中懒加载问题org.hibernate.LazyInitializationException
- Oracle查看表空间及使用情况
- Android Canvas.DrawLine绘制线段
- CEBIT首现移动电子硬盘,大小如名片
- 蛙人高频交易拆单策略—蛙人高频软件结构及使用说明
- 6那智机器人各轴旋转方向
- PCB中负片层的含义
热门文章
- ASP.NET Core WebAPI帮助页--Swagger简单使用1.0
- Windows 10《描图》应用现已开源
- 基于Ocelot的gRpcHttp网关
- 【青岛】12月16日.NETCore与AI技术交流会-等你来哦!!
- 调试 ASP.NET Core 2.0 源代码
- [干货来袭]C#7.0新特性(VS2017可用)
- 【BIM入门实战】Revit2018项目模板、族库图文安装教程
- linux c之通过popen执行shell命令
- Andorid之BINDSERVICE的使用方法总结
- 在n个火柴里面拿3根出来拼接成最大三角形的周长