Linux编译安装

Linux编译安装


   Linux上真正可以执行的文件是二进制文件,这些可以执行的二进制文件是哪儿来的呢?首先,必须要写程序的源代码,然后,由编译程序将程序的源代码 编译成二进制形式。源代码是由程序员编写的,使用特定的程序语言,如C,C++,Java,Python。但是机器看不懂这些语言,所以要使用编译程序将这些语言编写的源代码编译成机器可以看懂的二进制文件。如C语言常用的编译器 为gcc。

   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

  上面我们说到程序的源代码是需要编译的,那么我们编译就需要编译软件。现在我们要做的是编译安装软件前的环境准备

   1)这里我们要安装软件的编译环境首先要用到yum软件还要为yum配置yum仓库

[root@centos7 cdrom]# cd /etc/yum.repos.d/
[root@centos7 yum.repos.d]# cat base.repo 
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the 
# remarked out baseurl= line instead.
#
#
[base]
name=CentOS 7  Base
baseurl=http://10.1.0.1/cobbler/ks_mirror/7/
gpgcheck=1
[cdrom]
name=Centos 7 cdrom
baseurl=file:///mnt/cdrom
gpgcheck=0

    2)yum仓库准备好后我们可以安装编译环境了,安装Development Tools。

[root@centos7 ~]# yum groupinstall "Development Tools"

    3)编译环境准备好之后我们就要去找到程序的源代码开始进行编译安装了,我们上面说到过通过何种渠道获取程序源代码。

我们这里以apache httpd的编译安装为例给大家举个例子:

    这里我是到内部的ftp服务器上去找到源码文件,大家尝试安装的时候可以去官方站点去获取。

    先安装lftp,然后登陆服务器下载程序源代码包;

[root@centos7 ~]# yum install lftp
lftp 10.1.0.1:/pub/Sources/sources/httpd> mget httpd-2.2.29.tar.bz2 
5625498 bytes transferred 
[root@centos7 ~]# ls
anaconda-ks.cfg  Documents  haha.sh               initial-setup-ks.cfg  Pictures  Templates
Desktop          Downloads  httpd-2.2.29.tar.bz2  Music                 Public    Videos

      解压httpd-2.2.29.tar.bz2,进入httpd-2.2.29目录(需要注意的是这里编译安装是需要在解压后的文件目录中进行的)

[root@centos7 ~]# tar -xf httpd-2.2.29.tar.bz2 
[root@centos7 ~]# ls
anaconda-ks.cfg  Documents  haha.sh       httpd-2.2.29.tar.bz2  Music     Public     Videos
Desktop          Downloads  httpd-2.2.29  initial-setup-ks.cfg  Pictures  Templates

   前面我们已经把编译安装需要的软件环境和程序源代码都准备好了,接着我们要开始编译安装了。

   根据源码包中 Makefile.in 文件的指示,configure脚本检查当前的系统环境和配置选项,在当前目录中生成 Makefile 文件。然后 make 程序就按照当前目录中的 Makefile 文件的指示将源代码编译为二进制文件,最后将这些二进制文件按照Makefile文件的指示安装到指定的地方。

    1)configure脚本:

    通过选项传递参数,指定启用特性、安装路径等,执行时会参考用户的指定以及makefile.in文件生成makefile检查依赖到的外部环境

    选项:指定安装位置、指定启用的特性

    –help: 获取其支持使用的选项

    选项分类:

    安装路径设定:

      –prefix=/PATH: 指定默认安装位置,默认为/usr/local/

     –sysconfdir=/PATH:配置文件安装位置

      System types:支持交叉编译

    Optional Features: 可选特性

      –disable-FEATURE

      –enable-FEATURE[=ARG]

    Optional Packages: 可选包

      –with-PACKAGE[=ARG] 依赖包

      –without-PACKAGE 禁用依赖关系

[root@centos7 httpd-2.2.29]# ./configure --prefix=/usr/local/apache2 sysconfdir=/etc/apache2

   2)make

[root@centos7 httpd-2.2.29]# make

   3) make install

[root@centos7 httpd-2.2.29]# make install

最后我们可以测试我们的安装是否完成,并且功能可以使用

[root@centos7 bin]# apachectl start
ttpd: apr_sockaddr_info_get() failed for centos7.zang
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
httpd (pid 12167) already running

我们可以使用links来试一下

0824.png

082401.png


完成安装之后的配置:

1)导出二进制程序目录至PATH环境变量中
/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH

编译安装完成之后我们可以把apache添加到环境变量里

[root@centos7 apache2]# ls
bin  build  cgi-bin  conf  error  htdocs  icons  include  lib  logs  man  manual  modules
[root@centos7 apache2]# pwd
/usr/local/apache2
[root@centos7 profile.d]# vim apache2.sh
[root@centos7 profile.d]# . apache2.sh 
[root@centos7 profile.d]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/apache2/bin
[root@centos7 profile.d]# cat apache2.sh 
PATH=$PATH:/usr/local/apache2/bin

2)导出库文件路径
编辑/etc/ld.so.conf.d/NAME.conf
添加新的库文件所在目录至此文件中

[root@centos7 ld.so.conf.d]# vim /etc/ld.so.conf/apache.conf
/usr/local/apache2/lib

ldconfig

3)导出头文件

这里用软链接功能实现

[root@centos7 apache2]# ln -sv /usr/local/apache2/include/* /usr/include/

4)导出帮助手册
编辑/etc/man.config文件

#---------------------------------------------------------
# every automatically generated MANPATH includes these fields
#
#MANDATORY_MANPATH /usr/src/pvm3/man
#
MANDATORY_MANPATH /usr/man
MANDATORY_MANPATH /usr/share/man
MANDATORY_MANPATH /usr/local/share/man
MANDATORY_MANPATH /usr/local/apatch2/man -->此行为编辑添加
#---------------------------------------------------------

至此,编译安装软件完成。我们可以看到,编译安装程序需要:安装好环境、获取源代码包、编译安装、最后配置完成。



   系统kernel被删除之后的恢复

   上面介绍完了编译安装,现在说说系统kernel被删除之后系统启动不起来怎么办呢?当然我们不会自己去删除kernel,有时候可能是被恶作剧或者糟糕的情况是被黑掉了,我们需要怎么恢复呢?

   首先我们需要一张系统的光盘,然后就可以开始着手恢复系统了

   1)开机进度条时按ESC键(手一定要快,而且只能按一次ESC键,否则你就只能重启主机)。

出现如下图所示:

082301.png

选择CDROM选项

   2)之后先择如图:

082302.png

    3)到这步时,选择1选项Continue

082303.png

   4)进入到如下界面,安装kernel

082304.png

安装完成后重启主机,你会发现你的系统已经恢复了。

   

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

(0)
zanghongleizanghonglei
上一篇 2016-08-24
下一篇 2016-08-24

相关推荐

  • Linux运维之进程管理

    一、进程概念 进程是内核的一个功能,在Linux中,运行一个程序或命令可以出发一个事件而驱动一个PID,在linux系统中,系统只识别二进制程序文件,我们可以通过执行系统上的二进制程序来运行程序,进而产生进程。在linux系统中第一个进程是init程序,它是系统开机第一个加载的程序,用来支撑系统的正常运行的一个程序,内核启动的一个用户级进程。   …

    Linux干货 2016-09-09
  • 程序包管理及定时任务

    程序包管理及定时任务

    Linux干货 2018-01-01
  • ELK 日志分析实例

    网海过客www.chinasa.net ELK 日志分析实例一、ELK-web日志分析二、ELK-MySQL 慢查询日志分析三、ELK-SSH登陆日志分析四、ELK-vsftpd 日志分析 一、ELK-web日志分析 通过logstash grok正则将web日志过滤出来,输出到Elasticsearch 搜索引擎里,通过Kibana前端展示。  …

    Linux干货 2016-06-03
  • 磁盘管理(三)逻辑卷快照

      概述:逻辑卷管理(LVM)提供了为任何逻辑卷作一个快照的功能,目的是在一致的状态下来得到一个文件系统的备份.因为在备份过程中,应用程序可能访问一个分区的文件或者数据库.一些文件可能在一个状态被备份,而后面的文件可能在一个更新后被备份,导致备份的不完整 .传统的解决方法是以只读的方式挂载一个分区,对数据库应用表级锁或者关闭数据库的引擎等;所有的措…

    Linux干货 2016-09-05
  • linux用户和组的配置文件

    1./etc/passwd:用户及其属性信息(用户名,密码,uid,gid,gecos注释性描述信息,家目录,登录shell)在/etc/passwd文件中每个用户都有一个对应的记录行,它记录了这个用户的一些基本属性。系统管理员经常会接触到这个文件的修改以完成对用户的管理工作。这个文件对所有用户都是可读的。      …

    2017-07-22
  • 利用nginx实现基于传输层的四层负载均衡

    nginx利用ngx_stream_core_module实现四层的负载均衡服务。作为四层负载均衡nginx和lvs的区别在于: lvs工作于内核层,相对来说效率更高,性能更强; nginx工作于用户空间; lvs不会受到套接字数量的限制; nginx作为四层负载均衡也需要监听套接字来和客户端,后台服务器进行连接,会受到套接字数量限制,不过这个问题可以通过k…

    2017-07-03

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-26 11:50

    文章整体思路清晰,通过实际操作对理论的东西进行了实践,同时如果能对实践过程中遇到的问题进行总结,这样会让整个文章看起来更专业,更有可读性.