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

3c8ce6380daa33c267ccb0e2e66a02de.png

服务启动成功

原创文章,作者:megedugao,如若转载,请注明出处:http://www.178linux.com/39210

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297919.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac编辑器coda使用小贴条

前言:最近用mac开发环境了,自然一天到晚用coda,可总是有不顺的地方,搜到这篇文章感觉像看到了知音人,实在是解决了我不少疑难问题啊。外文针对的coda版本较低,我总结的针对版本是version1.7.3 coda快捷键操…

我在 GitHub 上发现了一款骚气满满的字体!

全世界只有3.14 % 的人关注了爆炸吧知识转自:量子位,作者:栗体这个字体叫 Leon Sans,表面看去平平无奇。但事实上,它并不是普通的字体,体内蕴藏着魔力。Leon Sans 最特别的地方在于,字体是由代码…

PHP 接收 UDP包_php只能做网站?基于swoole+websocket开发双向通信应用

前言众所周知,PHP用于开发基于HTTP协议的网站应用非常便捷。而HTTP协议是一种单向的通信协议,只能接收客户端的请求,然后响应请求,不能主动向客户端推送信息。因此,一些实时性要求比较高的应用,如实时聊天、…

OSI模型数据链路层为什么需要分层?

1.何为数据链路层的(DATA LINK LAYER)的MAC子层和LLC子层? MAC子层的主要功能包括数据帧的封装/卸装,帧的寻址和识别,帧的接收与发送,链路的管理,帧的差错控制等。MAC子层的存在屏蔽了不同物理链…

WPF 实现火炬效果

WPF开发者QQ群: 340500857 | 微信群 -> 进入公众号主页 加入组织欢迎转发、分享、点赞、在看,谢谢~。 01—效果预览02—代码如下一、FireControl.cs 代码如下using System; using System.Collections.Generic; using System.Linq; using System.Tex…

08 comet反向ajax

一&#xff1a;HTTP协议与技久链接分块传输---->反向ajax 反向ajax又叫comet, server push,服务器推技术. 应用范围: 网页聊天服务器,, 新浪微博在线聊天,google mail 网页聊天,都有用到. 原理: 一般而言, HTTP协议的特点, 连接<->断开. 具体什么时间断开? 服务器响应…

男朋友出的性格测试题

1 一家人出去玩了三天&#xff0c;把猫忘在家里了&#xff01;2 嗷呜3 竟然毫无违和感4 叫你一声造句鬼才不过分吧5 秋天原来是这样来的嘛~6 当代嗑cp网友现状5 现在的年轻人都哪里学来的这么多招数内容自沙雕男友的日常你点的每个赞&#xff0c;我都认真当成了喜欢

杂项记录

http://poj.org/ 算法 线性代数 编译原理 算法导论 算法&#xff08;软件设计师教程&#xff09; 《ACM国际大学程序设计竞赛亚洲区预选赛真题题解》转载于:https://www.cnblogs.com/end/archive/2011/10/29/2228940.html

linux连接建立的时间,用timedatectl在Linux中检查当前时区及更改时区(创建符号链接来更改时区)...

本文介绍如何在Linux操作系统中设置或更改时区的方法&#xff0c;可以使用timedatectl&#xff0c;包括通过创建符号链接来更改时区。前言时区是具有相同标准时间的地理区域&#xff0c;通常&#xff0c;时区是在操作系统的安装过程中设置的&#xff0c;但以后可以轻松更改。对…

python能不能自动写代码_微软最强 Python 自动化工具开源了!不用写一行代码

1. 前言最近&#xff0c;微软开源了一款非常强大的 Python 自动化依赖库&#xff1a;playwright-python&#xff0c;它支持主流的浏览器&#xff0c;包含&#xff1a;Chrome、Firefox、Safari、Microsoft Edge 等&#xff0c;同时支持以无头模式、有头模式运行&#xff0c;play…

mapbox 导航_狂甩不掉,骑行最稳手机支架!一体式安装太方便,秒变单车导航仪...

发对于骑行爱好者而言&#xff0c;对手机支架的稳固性有很高的要求&#xff0c;同时支架体积不能太大&#xff0c;对手机本身也要有一定的保护性&#xff0c;手机安放好&#xff0c;骑行才能更自在&#xff01;一个舒适的手机支架&#xff0c;对于业务繁忙或者像小渣一样的路痴…

Docker小白到实战之Docker网络简单了解一下

前言现在对于Docker容器的隔离性都有所了解了&#xff0c;但对容器IP地址的分配、容器间的访问等还是有点小疑问&#xff0c;如果容器的IP由于新启动导致变动&#xff0c;那又怎么才能保证原有业务不会被影响&#xff0c;这就和网络有挂钩了&#xff0c;接下来就大概说说。正文…

(三)java的数据类型

java是一种强类型的语言&#xff0c;所谓强类型&#xff0c;意味着每个变量都要有确定的类型&#xff0c;每个表达式也要有明确的类型&#xff0c;包括传递的某些参数。java中从大的方面分有两大数据类型&#xff0c;分别是基本数据类型和引用数据类型&#xff0c;基本数据类型…

遍历DataTable内存数据的三种方法性能对比

http://www.cnblogs.com/guowei1027/archive/2009/12/15/1624699.html 前几年曾经碰到一个生成递归树形菜单的功能&#xff0c;由于系统比较庞大&#xff0c;有300-400个菜单项&#xff0c;把这些菜单一次性递归加载&#xff0c;的确需要耗费一些时间。 当然若是动态加载什么的…

^_^家园游记^_^

j 你梦想中的家是怎么家的呢&#xff1f; 是鲁宾逊漂流记中那样&#xff1a;一个荒岛&#xff0c;一片青山绿水的悠闲自在&#xff1f; 还是让人流连忘返的色彩斑斓&#xff0c;鳞次栉比&#xff0c;浓浓的欧式典雅&#xff1f; 或是奔放自由的乡村田园&#xff0c;精…

sigar如何获取linux的buffer内存,Linux 下使用Sigar 获取内存信息

上一篇文章介绍了linux下的sigar 库,并使用sigar 库来获取cpu 使用率,本文在这里介绍一下如何使用sigar 库获取内存信息.和cpu 一样,sigar中有和内存相关的结构体sigar_mem_t,我们来看一下结构体原型:typedef struct {sigar_uint64_tram,total,used,free,actual_used,actual_fr…

如何将手机投屏到电脑_手机如何投屏到电脑上?详细教程看这里,手机投屏

手机再大的屏幕&#xff0c;也没有手机投屏到电脑、电视的体验爽。那么哪款投屏软件好用&#xff1f;又如何使用呢&#xff1f;下面小编给大家介绍下金舟苹果手机投屏软件&#xff0c;一起来看看如何将手机投屏到电脑上&#xff0c;详细步骤如下。第一步、首先&#xff0c;在电…

inputstream是否一定要close_汽车加装行李架后,总被交警拦下,类似改装,是否一定要备案...

其实改装不是儿戏&#xff0c;有些部位是一定不能触碰的&#xff0c;汽车“轻改”后担心上路被交警处罚&#xff0c;哪些是不能触碰的“红杠杠”&#xff0c;汽车加装行李架后&#xff0c;总被交警拦下&#xff0c;类似改装&#xff0c;是否一定需要备案&#xff0c;是我们今天…

不好意思,爱因斯坦这次,又对了!

▲ 点击查看在科学界中&#xff0c;有一个非常著名的概念&#xff0c;叫做后设认知。官方解释是&#xff1a;人们是如何对自己的思维模式进行反思。打个简单的比方&#xff1a;你学习或者自己孩子学习的时候&#xff0c;会不会经常出现一道数学题反复做错的情况&#xff0c;明明…

如何正确处理 .NET 文件的 `File in use by another process` 异常 ?

咨询区 Dawsy&#xff1a;我的项目中有一个需求&#xff0c;它需要不断的访问一个文件&#xff0c;很多时候这个访问逻辑都是正常的&#xff0c;但有时候访问太快&#xff0c;会抛出如下异常&#xff1a;"File in use by another process"为了能找到其解决方案&#…