Skip to main content

moregeek program

源码包编译_极光_code的博客-多极客编程


1. 源码编译介绍

源码安装就是将开发人员写好的源码文件进行手动编译安装。目前开源软件,并不是所有的源代码都打成包,如果想使用开源软件,是需要自己下载进行编译安装。需要进行编译安装的场景:

  1. 软件提供商没有做打包的操作(也就是编译源码)
  2. 生产环境需要软件的某些特性,需要编译安装。

但是源码编译安装是比较繁琐的一个过程,好在前辈们已经提供了相关的项目管理工具,这大大降低了编译过程的复杂性


2. 开源程序源代码的获取

项目官方自建站点:

代码托管:


3. 编译源码的项目工具

C、C++的源码编译:

  • make项目管理器
  • configure脚本-->Makefile.in-->Makefile

相关开发工具

  • autoconf:生成configure脚本
  • automake:生成Makefile.in

Java的源码编译:

  • Maven(这里暂时不做过多的介绍)


4. C语言源代码编译安装过程

利用编译工具,通常只需要三大步骤:

  • ./configure
  • make
  • make install

第一步:​​./configure​

  1. 拿到源码包后,解压完成后进入解压目录,阅读目录中的INSTALL/README文件,只需要查看其中如何安装的部分即可;

源码包编译_Linux系统

  1. 解压后目录中通常还有configure文件(也可能为config)文件。执行​​./configure​​或者带有选项参数,是检查系统环境是否符合安装要求,并将定义好的安装配置和系统环境信息写入Makefile文件中。里面包含了如何编译、启动的功能、安装路径等信息。


第二步:​​make​
执行make命令进行编译。manke命令会根据Makefile文件进行编译。编译工作主要是调用编译器(如gcc)将源码编译为可执行文件,通常需要调用一些函数库才能产生一个完整的可以执行文件


第三步:​​make install​

将上一步缩编的数据复制到指定的目录下(实际上官方提供可下载的rpm包安装时就是将数据复制到官方编译时所指定的目录中)


4.1 编译安装准备

准备安装相关的依赖包

  • 开发工具:make,gcc
  • 开发环境:开发库(glibc:标准库),头文件,等
  • 软件相关依赖包


4.2 编译安装

configure脚本的通用选项:

  • --prefix= # 指定安装的路径
  • sysconfdir= # 指定配置文件目录
  • enable-feature # 启用某个特性
  • --distable-feature # 禁用特性
  • --with-function # 启用某个功能
  • --without-function # 禁用某个功能

可使用 ​​./configure --help​​查看具体的帮助信息


4.3 安装后的配置

  1. 二进制程序目录导入PATH环境变量中

shell> echo "export PATH=/usr/local/apache/bin:$PATH" > /etc/profile.d/apache.sh
shell> chmod +x /etc/profile.d/apache.sh
shell> source /etc/profile.d/apache.sh
  1. 按需求定制服务启动脚本,且考虑是否加入开机启动项
  2. 输出头文件和库文件

# 输出头文件
shell> ln -s /usr/local/apache/include /usr/include/apache

# 输出库文件
shell> echo "/usr/local/apache/lib" >/etc/ld.so.conf.d/apache.conf
shell> ldconfig
  1. 导出man路径

shell> echo  "MANPATH /usr/local/apache/man" >> /etc/man.conf


5. 案例练习:阿里云ECS编译安装httpd

5.1 环境信息

[root@node30 ~]# cat /etc/redhat-release 
CentOS Linux release 7.6.1810 (Core)
[root@node30 data]# rpm -ql httpd
未安装软件包 httpd
[root@node30 data]# uname -r
3.10.0-957.el7.x86_64
[root@node30 data]# uname -m
x86_64


5.2 下载httpd源码包

Apache源码包下载地址:​​http://httpd.apache.org/download.cgi​

源码包编译_Linux系统_02

5.3 安装相关依赖包

root@node30 ~]# yum -y groupinstall "development tools"
[root@node30 ~]# yum -y install pcre-devel openssl-devel expat-devel
[root@node30 ~]# yum -y install gcc make autoconf apr-devel apr-util-devel


5.4 配置编译

[root@node30 httpd-2.4.43]# pwd
/data/httpd-2.4.43
[root@node30 httpd-2.4.43]# ls
ABOUT_APACHE BuildBin.dsp emacs-style LAYOUT NOTICE srclib
acinclude.m4 buildconf httpd.dep libhttpd.dep NWGNUmakefile support
Apache-apr2.dsw CHANGES httpd.dsp libhttpd.dsp os test
Apache.dsw CMakeLists.txt httpd.mak libhttpd.mak README VERSIONING
apache_probes.d config.layout httpd.spec LICENSE README.cmake
ap.d configure include Makefile.in README.platforms
build configure.in INSTALL Makefile.win ROADMAP
BuildAll.dsp docs InstallBin.dsp modules server

[root@node30 httpd-2.4.43]# ./configure --prefix=/data/http \
> syscnotallow=/dat/etc/http \
> --enable-ssl
[root@node30 httpd-2.4.43]# echo $?
0


5.5 编译并安装

[root@node30 httpd-2.4.43]# make -j 4 && make install
[root@node30 httpd-2.4.43]# echo $?
0


5.6 配置环境

[root@node30 http]# echo 'PATH=/data/http/bin:$PATH' > /etc/profile.d/httpd.sh
[root@node30 http]# . /etc/profile.d/httpd.sh


5.7 使用apachectl自带脚本来管理服务

[root@node30 http]# apachectl start
[root@node30 http]# ss -ntl | grep 80
LISTEN 0 128 :::80 :::*


5.8 指定使用apache用户运行Apache程序

[root@node30 http]# useradd -r -s /sbin/nologin -d /var/www -c Apache -u 48 apache
[root@node30 http]# vim /data/http/conf/httpd.conf
User apache
Group apache
[root@node30 http]# apachectl restart


5.9 使用客户端测试

源码包编译_Linux系统_03

docker搭建kafka集群_wx6369307062d07的博客-多极客编程

对于个人开发者而言,一般手头上没有多台服务器,有人可能会有云服务器,不过一般也只会买一台来用用就好;有人可能更习惯将本机当作服务器来玩。都可以。那么如何通过一台服务器或本机来搭建Kafka集群呢?无外乎两种方式,一是通过docker来搭建,每台kafka broker用不同的端口来启动,即可组成集群;二是通过虚拟机来搭建,即用VMware在服务器或本机上启动多台虚拟机,每台虚拟机都安装一个kafk

[ linux ] 进程间通信介绍 管道_小白又菜的博客-多极客编程

0.进程间通信介绍0.1通信背景在之前我们学习进程时知道进程具有独立性,所以进程间交互数据的成本就变得非常高。进程之间为什么也进行进程间通信,这就需要谈谈进程间通信的目的了。但是进程具有独立性不是彻底独立,只管自己不理任何人,当然不是这样的。进程之间也是存在通信的。那么进程间通信的方式也有很多种,包括管道,System V IPC,POSIX IPC........那么今天我们先来看看进程间如何通

python基础之循环_清晨的博客-多极客编程

一、简介循环的作⽤:让代码更⾼效的重复执⾏。在Python中,循环分为 while 和 for 两种,最终实现效果相同。二、while1、while语法while 条件: 条件成⽴重复执⾏的代码1 条件成⽴重复执⾏的代码2 ...... 1、实例# 循环的计数器i = 0while i < 5: print('hello,world') i += 1print('任务结束')2、计算1至10

fastdfs的安装和使用_wx6369307062d07的博客-多极客编程

fastdfs是用 c 语言编写的一款开源的分布式文件系统,有多种原因的客户端(包括有Java的客户端)。FastDFS 为互联网量身定制, 充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用 FastDFS 很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。fastdfs架构包括 Tracker server 和 Storage server。客户端请求 

prometheus_大雨的博客-多极客编程

1、部署prometheus server官网下载地址:https://prometheus.io/download/[root@ubuntu2004 ~]#tar xf prometheus-2.40.2.linux-amd64.tar.gz -C /usr/local/[root@ubuntu2004 ~]#cd /usr/local/[root@ubuntu2004 local]#mv pr

linux内核参数引起的 k8s 集群血案_linksla智能运维管家的博客-多极客编程

一、背景说明运行环境信息:Kubernetes + docker,应用程序:Java问题描述1、首先从 Kubernetes 事件中心告警信息如下,该告警集群常规告警事件(其实从下面这些常规告警信息是无法判断是什么故障问题)2、最初怀疑是 docker 服务有问题,切换至节点上查看 docker & kubelet 日志,如下:kubelet 无法初始化线程,需要增加所处运行用户的进程限制

docker搭建kafka集群_wx6369307062d07的博客-多极客编程

对于个人开发者而言,一般手头上没有多台服务器,有人可能会有云服务器,不过一般也只会买一台来用用就好;有人可能更习惯将本机当作服务器来玩。都可以。那么如何通过一台服务器或本机来搭建Kafka集群呢?无外乎两种方式,一是通过docker来搭建,每台kafka broker用不同的端口来启动,即可组成集群;二是通过虚拟机来搭建,即用VMware在服务器或本机上启动多台虚拟机,每台虚拟机都安装一个kafk

[ linux ] 进程间通信介绍 管道_小白又菜的博客-多极客编程

0.进程间通信介绍0.1通信背景在之前我们学习进程时知道进程具有独立性,所以进程间交互数据的成本就变得非常高。进程之间为什么也进行进程间通信,这就需要谈谈进程间通信的目的了。但是进程具有独立性不是彻底独立,只管自己不理任何人,当然不是这样的。进程之间也是存在通信的。那么进程间通信的方式也有很多种,包括管道,System V IPC,POSIX IPC........那么今天我们先来看看进程间如何通

python基础之循环_清晨的博客-多极客编程

一、简介循环的作⽤:让代码更⾼效的重复执⾏。在Python中,循环分为 while 和 for 两种,最终实现效果相同。二、while1、while语法while 条件: 条件成⽴重复执⾏的代码1 条件成⽴重复执⾏的代码2 ...... 1、实例# 循环的计数器i = 0while i < 5: print('hello,world') i += 1print('任务结束')2、计算1至10

python编程(gui线程和工作线程的同步)-多极客编程_python 线程同步

    一般来说,编写gui客户端之外,都要编写几个work thread。因为如果只有一个gui thread,在某些socket或者低速io操作的时候,速度是非常慢的,所以这个时候建议多开几个thread,增加用户体验。    增加几个work thread本身没有问题,但是gui和工作线程沟通是一个问题。一般来说,常用的方法就是在gui线程起一个timer,定时通过queue数据看一下wor

karmada跨集群优雅故障迁移特性解析_华为云开发者社区的博客-多极客编程

摘要:在 Karmada 最新版本 v1.3中,跨集群故障迁移特性支持优雅故障迁移,确保迁移过程足够平滑。本文分享自华为云社区《​​Karmada跨集群优雅故障迁移特性解析​​》,作者:Karmada社区。在多云多集群应用场景中,为了提高业务的高可用性,用户的工作负载可能会被部署在多个集群中。然而当某个集群发生故障时,为保证业务的可用性与连续性,用户希望故障集群上的工作负载被自动的迁移到其他条件适

fastdfs的安装和使用_wx6369307062d07的博客-多极客编程

fastdfs是用 c 语言编写的一款开源的分布式文件系统,有多种原因的客户端(包括有Java的客户端)。FastDFS 为互联网量身定制, 充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用 FastDFS 很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。fastdfs架构包括 Tracker server 和 Storage server。客户端请求