电商服务架构——LAMP

LAMP简介

LAMP是典型的电商架构,其是linux/nuix/windows+apache/nginx+mysql/pgsql+php/python/golang结构的简称。

(本篇各软件的安装将使用源码压缩包安装,旨在培养源码安装能力,虽然目前企业中安装软件使用的是rpm包,但是源码安装软件也是必备技能。)

制作rhel7.6母盘

目前redhat已经更新到8.3版本,但是由于各种原因,企业中应用的还是以rhel7为主,因此开始先制作rhel7.6的母盘,由母盘可以出创建出多台设备,其原理类似于VMware中创建链接克隆,其优点在于占用硬盘资源极少,在不开机时只有2M左右。

  • 在vmware或KVM中安装rhel7.6(安装时选择最小化安装;在实验阶段可以选择关闭kdump以减少系统资源;开机时按e加上selinux=0不开启selinux)在这里插入图片描述
    在这里插入图片描述

  • 安装完成后,配置静态网络
    在这里插入图片描述

  • 设置yum源:在物理机(rhel)中安装httpd,发布网络软件仓库,在rhel7.6中配置yum源,并用yum repolist检查yum源
    在这里插入图片描述

  • 关闭防火墙,关闭NetworkManager,设置selinux为disabled
    systemctl disable --now firewalld
    systemctl disable --now NetworkManager
    vim /etc/selinux/config

  • 创建母盘
    在物理机中安装virt-sysprep
    使用virt-sysprep -d 虚拟机名清理信息
    virt-sparsify --compress 虚拟机名.qcow2 母盘名.qcow2 生成rhel母盘
    qemu-img create -f qcow2 -b 母盘名.qcow2 node1 利用母盘创建node1
    在这里插入图片描述

注:此过程类似与VMware中使用链接克隆,如果本身linux就装在VM中,可以直接使用链接克隆,如果物理机为linux,使用KVM执行以上步骤。

Nginx

什么是nginx

Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP/SMTP服务。

Nginx是一款轻量级的Web服务器、反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

nginx的作用

正向代理
正向代理,是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端,客户端才能使用正向代理。当需要把你的服务器作为代理服务器时,可以用Nginx来实现正向代理。

反向代理
反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet上 的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

负载均衡
负载均衡就是将一个任务分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务,简单而言就是当有2台或以上服务器时,根据规则随机的将请求分发到指定的服务器上处理。负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡,而Nginx目前支持自带3种负载均衡策略,还有2种常用的第三方策略。

HTTP服务器
Nginx本身也是一个静态资源的服务,当只有静态资源的时候,就可以使用Nginx来做服务器,同时现在也很流行动静分离,就可以通过Nginx来实现。动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。

优点

  • 高并发量:根据官方给出的数据,能够支持高达 50,000 个并发连接数的响应

  • 简单稳定:配置简单,基本在一个conf文件中配置,性能比较稳定,可以7*24小时长时间不间断运行

  • 内存消耗少:处理静态文件,同样起web 服务,比apache 占用更少的内存及资源,所以它是轻量级的

  • 模块化程度高:Nginx是高度模块化的设计,编写模块相对简单,包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter,* 支持 SSL 和 TLSSNI。

  • 支持Rwrite重写规则:能够根据域名、URL的不同, 将HTTP请求分发到不同的后端服务器群组。

  • 低成本:Nginx可以做高并发的负载均衡,且Nginx是开源免费的,如果使用F5等硬件来做负载均衡,硬件成本比较高。
    *支持多系统:Nginx代码完全用C语言从头写成,已经移植到许多体系结构和操作系统,包括:Linux、FreeBSD、Solaris、Mac OS X、AIX以及Microsoft Windows,由于Nginx是免费开源的,可以在各系统上编译并使用。
    缺点

  • 动态处理差:nginx处理静态文件好,耗费内存少,但是处理动态页面则很鸡肋,现在一般前端用nginx作为反向代理抗住压力,apache作为后端处理动态请求。

  • rewrite弱:虽然nginx支持rewrite功能,但是相比于Apache来说,Apache比nginx 的rewrite 强大。

nginx官网

docs.nginx.com
里面有nginx详细的配置方案

安装Nginx

tar zxf nginx-1.18.0.tar.gz 解压安装包
在这里插入图片描述
在这里插入图片描述
扩展资料
Configure是一个可执行脚本,它有很多选项,在待安装的源码路径下使用命令./configure --help输出详细的选项列表。其中,prefix选项是配置安装的路径,如果不配置该选项,安装后可执行文件默认放在/usr/local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc,其它的资源文件放在/usr/local/share,比较凌乱。如果配置prefix,如:
./configure --prefix=/usr/local/nginx可以把所有资源文件放在/usr/local/nginx的路径中,不会杂乱。
后面还会用到cmeke,gmake编译

./configure与cmake详见文末

./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module 运行安装脚本,并根据提示逐一解决依赖性
其中–prefix=/usr/local/nginx表示自定义安装目录, – with-XXX_ module选项表示指明安装对应的模块,–without-XXX_ module选项表示指明不安装对应的模块
在这里插入图片描述
yum install -y gcc
在这里插入图片描述
vim auto/cc/gcc 注释debug

yum install -y pcre-devel 提示缺少PCRE动态库,而库包含很多文件,-devel指相应的开发包
在这里插入图片描述
yum install -y openssl-devel 加-devel,原因同上
此时./configure --prefix=/usr/local/nginx --with-http_ssl_module脚本运行成功,接下来编译安装软件
ll Makefile 查看是否出现Makefile(注意Make首字母大写)
make && make install 前者是编译后者是安装

cd /usr/local/nginx/sbin 进入安装目录下的sbin才能执行以下命令
在这里插入图片描述
./nginx 启动nginx
./nginx -v 查看版本信息
./nginx -t 检查配置文件有没有错误
./nginx -s stop 关闭nginx
yum install -y net-tools.x86_64 在rhel7中不能使用netstat命令,需安装net-tools
netstat -antlp | grep :80 查看是启动还是关闭状态
在这里插入图片描述

测试

在这里插入图片描述
在这里插入图片描述
Bingo!!!

mysql

DQL DCL DML DDL

源码安装mysql并逐一解决依赖性

在mysql 官网 https://www.mysql.com/downloads/ 下载官方社区版本源码包的
tar zxf mysql-boost-5.7.31.tar.gz

在这里插入图片描述
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DMYSQL_UNIX_ADDR=/usr/local/mysql/data/mysql.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DWITH_BOOST=/root/mysql-5.7.31/boost/boost_1_59_0 定制参数安装
在这里插入图片描述

在这里插入图片描述
此时,一步一步根据提示解决依赖性(必要时删除CMakeCache.txt
在这里插入图片描述
解决依赖性后 make && make install 编译并安装

配置mysql

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld 复制mysqld脚本,并保证有执行权限
vim /etc/my.cnf 修改配置文件

[mysqld]
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/data/mysql.sock
symbolic-links=0

vim ~/.bash_profile 修改环境变量

PATH=$PATH:$HOME/bin:/usr/local/mysql/bin

source ~/.bash_profile 加载环境变量文件

useradd -u 1000 -M -d /usr/local/mysql/data -s /sbin/nologin mysql 创建mysql用户,因为源码安装不像rpm包会自动创建用户
mysqld --initialize --user=mysql 生成随机数密码,记住随机数密码,重复执行会报错(忘记后需要删除/usr/local/mysql/,在源码文件夹下重新安装make install)
在这里插入图片描述

/etc/init.d/mysqld start 启动mysql,切记不要重复启动,否则会报错
netstat -antlupe | grep :3306 查看端口是否开启来确认mysql是否启动
在这里插入图片描述

mysql_secure_installation 执行安全初始化脚本,并使用随机数密码修改mysql密码,全部回车即可

mysql -p 登录mysql
在这里插入图片描述

Bingo!!!

php

安装php

tar jxf php-7.4.12.tar.bz2 解压前需要安装bzip2
cd cd php-7.4.12
useradd -M -d /usr/local/nginx/ -s /sbin/nologin nginx php配置是指定用户(–with-fpm-user=nginx)建议与nginx用户一致
vim /usr/local/nginx/conf/nginx.conf

user nginx nginx;

nginx -s reload 在nginx开启状态下重新加载配置文件
在这里插入图片描述
ps aux查看添加用户成功

./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-mysqlnd --with-pdo-mysql --with-mysqli --with-openssl-dir --enable-gd --with-zlib-dir --with-curl --with-pear --enable-inline-optimization --enable-soap --enable-sockets --enable-mbstring --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-fpm-systemd 定制生成php的makefile

  • 根据提示逐步安装依赖性
    yum install -y systemd-devel
    yum install -y libxml2-devel
    yum install -y sqlite-devel
    yum install -y libcurl-devel
    yum install -y libpng-devel
    yum install -y oniguruma-6.8.2-1.el7.x86_64.rpm oniguruma-devel-6.8.2-1.el7.x86_64.rpm
    在这里插入图片描述

安装完成!
在这里插入图片描述

nginx+php+mysql

nginx+php

vim /usr/local/nginx/conf/nginx.conf
在这里插入图片描述
在这里插入图片描述
注: fastcgi.conf包含了fastcgi_param和注释的语句,如果不把fastcgi_param改为fastcgi.conf;就要把注释一行的/scripts改为nginx默认发布目录

cgi相关见文末

cp /mnt/php-7.4.12/php.ini-production /usr/local/php/etc/php.ini
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
vim /usr/local/php/etc/php-fpm.conf
在这里插入图片描述
vim /usr/local/nginx/html/index.php

<?php
phpinfo()
?>

cp /mnt/php-7.4.12/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
/etc/init.d/php-fpm start
在这里插入图片描述
cp /mnt/php-7.4.12/sapi/fpm/php-fpm.service /usr/lib/systemd/system
vim /usr/lib/systemd/system/php-fpm.service在这里插入图片描述
systemctl daemon-reload
systemctl start php-fpm

nginx成功显示php动态界面
在这里插入图片描述
php/etc/php.ini是php主配置文件,修改后ystenctl reload php-fpm平滑重载php

nginx+php+mysql

/etc/init.d/mysqld start 先启动mqsql并把php写道环境变量中
vim /usr/local/php/etc/php.ini
在这里插入图片描述
在配置文件中指定socket
在这里插入图片描述
在这里插入图片描述systemctl reload php-fpm 平滑重载

测试

安装phpMyAdmin-5.0.2-all-languages.zip用unzip解压后并mv到/usr/local/nginx/html/phpMyAdmin,用浏览器访问172.25.253.1/phpMyAdmin
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此时已成功在nginx上能使用php,并且php可以调用数据库

lamp高速缓存

缓存对比图及压力测试速度对比

php+memcache(高速缓存)

下载memcache-4.0.5.2.tgz解压后进入目录,执行phpize需将php增加到环境变量
在这里插入图片描述
在这里插入图片描述
make && make install
在这里插入图片描述
vim /usr/local/php/etc/php.ini 增加一行,位置随意
在这里插入图片描述
在这里插入图片描述
php通过memcache.so模块操作memcache服务,因为我们的php是源码安装的,所以memcache.so模块也要通过源码安装,如果通过rpm包安装该模块,会出现冲突,但此时我没还没有安装memcache服务
yum install -y memcache 安装memcache服务
systemctl start memcached 启动服务
在这里插入图片描述
在这里插入图片描述
vim /usr/lcoal/nginx/html/memcache.php
在这里插入图片描述
在多次刷新example.php后,memcache.php显示缓存多次命中。
在这里插入图片描述
缓存流程:用户 -> ngiox -> fastcgi_pass-> php-fpm:9000 -> php-memcache模块 -> memcache:11211,此流程中nginx的高并发,高吞吐并未全部发挥出来,应为缓存在php后的服务中,nginx要做反向代理才能访问到缓存,因此有没有可能直接将缓存存储在nginx当中呢?答案是有的

(openresty)nginx+memcache

在这里插入图片描述
nginx的高速缓存策略是用memc+srcache,此时我们用OpenResty,内部有nginx与lua的高性能Web平台,需要注意的是在企业中我们往往是用多套缓存机制的。
nginx -s stop 暂停nginx
解压OpenResty后使用./configuer生成makefile后,gmake && gmakeinstall编译安装
nginx -s stop 关闭nginx,并确定80端口是关闭的,查看端口命令为netstart -autlp
cd /usr/local/openresty/nginx/conf/ 进入openresty的nginx目录下
vim nginx.conf 注:第二行的auto也可以不用改
在这里插入图片描述在这里插入图片描述在这里插入图片描述
cd /usr/local/openresty/nginx/sbin
./nginx -t检测配置文件是否正确
./nginx 启动openresty下的nginx,此时启动的同样是80端口
cp /mnt/memcache-4.0.5.2/example.php /usr/local/openresty/nginx/html/ 复制example.php进行压力测试
yum install -y httpd-tools 安装软件用ab(apachebench)命令进行压力测试
ab -c10 -n5000 http://172.25.253.1/example.php 对nginx传统缓存(php+memcache)进行压力测试
在这里插入图片描述
传统缓存时的nginx速度为1638
现在切开始配置openresty下的nginx高效缓存(memc+srcache)
vim /usr/local/openresty/nginx/conf/nginx.conf

        upstream memcache {		##在http模块下加入负载均衡代码
        server 127.0.0.1:11211;
        keepalive 512;
        }
  		
  		location /memc {        ##在http模块下的server下加入location
        internal;
        memc_connect_timeout 100ms;
        memc_send_timeout 100ms;
        memc_read_timeout 100ms;
        set $memc_key $query_string;
        set $memc_exptime 300;
        memc_pass memcache;
        }
	 	
	    location ~ \.php$ {		##在location中php下加入下面缩进的三行
                set $key $uri$args;
                srcache_fetch GET /memc $key;
                srcache_store PUT /mamc $key;
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            #fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi.conf;
        }

/usr/local/openresty/nginx/sbin/nginx -t 检测语法
在这里插入图片描述
进行压力测试

LAMP -> LAMJ

将LAMP架构中的php换成jsp就有了现在所说的LAMJ架构

nginx+tomcat+jdk

tomcat
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
当在一台机器上配置好nginx服务器是,可利用nginx响应HTML页面的访问请求。实际上Tomcat是nginx服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与nginx独立的进程单独运行的。
jdk
JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

架构方案
此时已经掌握了nginx的负载均衡,因此我们将tomcat和jdk安装在node2和node3上,只有处理jsp请求时,通过负载均衡访问node2和node3
在这里插入图片描述
需要以上三个包,并通过rpm包的方式安装jdk。
在这里插入图片描述
测试
在这里插入图片描述
在node3中重复相同的操作

修改node1的nginx的配置做到node2和node3负载均衡
vim nginx.conf

http {
        upstream tomcat {
        server 172.25.253.2:8080;
        server 172.25.253.3:8080;
        }
#在第一个server下加lication
location ~ \.jsp$ {
            proxy_pass   http://tomcat;
        }

测试
把提前准备好的jsp文件放到默认发布目录中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

session共享

ngixn(需scicky模块)+tomcat+memcache实现session交叉存储

安装sticky模块

stichy模块属于nginx plus(付费),当我们只开启一个tomcat时,产生的数据会保存到本地,但是当开启两个tomcat时,由于在负载均衡状态,受到nginx的调度,node2端提交数据后直接跳到了node3,与之前的建立的session断开了,再次回来数据就不存在了。为了解决这个问题,我们需要重新编译,添加sticky模块。sticky粘值能让同一个服务器的请求放到同一个后端上。
在node1(nginx服务器)上安装sticky模块
unzip nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip 需要安装unzip,解压文件
在这里插入图片描述较原来安装方式多了sticky模块的绝对路径
make 不要make install在这里插入图片描述

upstream tomcat {
        sticky;		通过cookie粘滞
        server 172.25.253.2:8080;
        server 172.25.253.3:8080;
        }

此时在浏览器访问172.25.253.1/test.jsp就会只在一个tomcat服务器中,不会来回跳,失去session数据,如果不设置粘滞,就会出现购物时想把一个商品加入购物车,但加入购物车后,以前的购物车被清空了。

memcache实现session交叉存储

node2
如果node2的tomcat挂掉,那么node2上的数据依然会丢失,因此我们需要memcache的加入实现session交叉存放,即将访问tomcat2上的数据存放在memcache3中,将访问tomcat3上的数据存放在memcache2中。
在这里插入图片描述
vim /usr/local/tomcat/conf/vim context.xml 在node2中设置

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
 memcachedNodes="n1:172.25.253.2:11211,n2:172.25.253.3:11211"
 failoverNodes="n1"		#当出现故障时找n1,正常时找n2,实现了session交叉存储
 requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
 transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
 />

yum install -y memcached.x86_64 安装memcache
systemctl start memcached.service 启动memcache服务
cd /usr/local/tomcat/
bin/shutdown.sh 停止服务
bin/startup.sh 启动服务

node3
执行node2同样的操作,只不过将failoverNodes="n1"改为n2即可

测试

在这里插入图片描述
此时沾滞在172.25.253.3上,可看到保存的session,此时我们停掉node3的tomcat(bin/shutdown.sh)
在这里插入图片描述
发现tomcat换成了172.25.253.2,但是session被保留下来了,但是如果一台主机的tomcha和memcache都挂掉,或者宕机了,session就没了。

这里是文末

cgi fastcgi php-fpm

一个完整的动态PHP Web访问流程: 当Web Server收到 index.php 这个请求后,会启动对应的 CGI 程序,这里就是PHP的解析器。接下来PHP解析器会解析php.ini文件,初始化执行环境,然后处理请求,再以规定CGI规定的格式返回处理后的结果,退出进程,Web server再把结果返回给浏览器。

基础概念

  • CGI:是 Web Server 与 Web Application 之间数据交换的一种协议。
  • FastCGI:同 CGI,是一种通信协议,但比 CGI 在效率上做了一些优化。同样,SCGI 协议与 FastCGI 类似。
  • PHP-CGI:是 PHP (Web Application)对 Web Server 提供的 CGI 协议的接口程序。
  • PHP-FPM:是 PHP(Web Application)对 Web Server 提供的 FastCGI 协议的接口程序,额外还提供了相对智能一些任务管理。CGI工作原理 web服务器收到用户请求,就会把请求提交给cgi程序(如php-cgi),cgi程序根据请求提交的参数作应处理(解析php),然后输出标准的html语句,返回给web服服务器,WEB服务器再返回给客户端,这就是普通cgi的工作原理CGI缺点: 每一次web请求都会有启动和退出过程

FAST-CGI工作原理

  • Web Server启动时载入FastCGI进程管理器(Apache Module或IIS ISAPI等)
  • FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可建多个php-cgi),并等待来自Web Server的连接。
  • 当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
  • FastCGI子进程完成处理后,将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待,并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。fast_cgi与cgi区别CGI,每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展,并重新初始化全部数据结构。FastCGI,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。

FastCGI是多进程,所以比CGI多线程消耗更多的服务器内存,php-cgi解释器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数。

要了解php-fpm,需要先了解php-cgi,PHP-CGI就是PHP实现的自带的FastCGI管理器。而PHP-CGI只是个CGI程序,他自己本身只能解析请求,返回结果,不会进程管理。所以就出现了一些能够调度 php-cgi 进程的程序,比如说由lighthttpd分离出来的spawn-fcgi。同样,PHP-FPM也是用于调度管理PHP解析器php-cgi的管理程序,PHP-FPM可以通过生成新的子进程可以实现php.ini修改后的平滑重启。

./configure与cmake

Pipeline

源文件 --> cmakelist --> cmake --> makefile --> make --> 可执行文件

示意图如下:
在这里插入图片描述

基本信息

  • ./configure 是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本。

  • make 是用来编译的,它从Makefile中读取指令,然后编译。

  • make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。

注意:AUTOMAKE和AUTOCONF是非常有用的用来发布C程序的东西。

详细解释

configure命令

这一步一般用来生成 Makefile,为下一步的编译做准备,你可以通过在 configure 后加上参数来对安装进行控制,比如代码:./configure –prefix=/usr 意思是将该软件安装在 /usr 下面,执行文件就会安装在 /usr/bin (而不是默认的 /usr/local/bin),资源文件就会安装在 /usr/share(而不是默认的/usr/local/share)。同时一些软件的配置文件你可以通过指定 –sys-config= 参数进行设定。有一些软件还可以加上 –with、–enable、–without、–disable 等等参数对编译加以控制,你可以通过允许 ./configure –help 察看详细的说明帮助。

make

这一步就是编译,大多数的源代码包都经过这一步进行编译(当然有些perl或python编写的软件需要调用perl或python来进行编译)。如果 在 make 过程中出现 error ,你就要记下错误代码(注意不仅仅是最后一行),然后你可以向开发者提交 bugreport(一般在 INSTALL 里有提交地址),或者你的系统少了一些依赖库等,这些需要自己仔细研究错误代码。

可能遇到的错误:make *** 没有指明目标并且找不到 makefile。 停止。问题很明了,没有Makefile,怎么办,原来是要先./configure 一下,再make。

make install

这条命令来进行安装(当然有些软件需要先运行 make check 或 make test 来进行一些测试),这一步一般需要你有 root 权限(因为要向系统写入文件)。

扩展说明

Linux的用户可能知道,在Linux下安装一个应用程序时,一般先运行脚本configure脚本,生成Makefile文件,然后用make来编译源程序,在运行make install安装,最后运行make clean删除一些临时文件。
  configure是一个shell脚本,它可以自动设定源程序以符合各种不同平台上系统的特性,并且根据系统叁数及环境产生合适的Makefile文件或是C的头文件(header file),让源程序可以很方便地在这些不同的平台上被编译连接。
  利用configure所产生的Makefile文件有几个预设的目标可供使用,其中几个重要的简述如下:

make all:产生我们设定的目标,即此范例中的可执行文件。只打make也可以,此时会开始编译原始码,然后连结,并且产生可执行文件。

make clean:清除编译产生的可执行文件及目标文件(object file,*.o)。

make distclean:除了清除可执行文件和目标文件外,把configure所产生的Makefile也清除掉。

make install:将程序安装至系统中。如果原始码编译无误,且执行结果正确,便可以把程序安装至系统预设的可执行文件存放路径。如果用bin_PROGRAMS宏的话,程序会被安装至/usr/local/bin这个目录。

make dist:将程序和相关的档案包装成一个压缩文件以供发布。执行完在目录下会产生一个以PACKAGE-VERSION.tar.gz为名称的文件。 PACKAGE和VERSION这两个变数是根据configure.in文件中AM_INIT_AUTOMAKE(PACKAGE,VERSION)的定义。在此范例中会产生test-1.0.tar.gz的档案。

make distcheck:和make dist类似,但是加入检查包装后的压缩文件是否正常。这个目标除了把程序和相关文件包装成tar.gz文件外,还会自动把这个压缩文件解开,执行 configure,并且进行make all 的动作,确认编译无误后,会显示这个tar.gz文件可供发布了。这个检查非常有用,检查过关的包,基本上可以给任何一个具备GNU开发环境-的人去重新编译。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
本文主要总结了在Ubuntu10下常用Java Web应用软件的安装,特别是LNMJ Web(Linux+Nginx+Mysql+Java Tomcat)架构和LAMJ Web(Linux+Apache+Mysql+Java Tomcat)架构下的软件安装。为进一步配置和实现LNMJ和LAMJ架构(负载均衡与集中式Memcached集群)进行前期准备。本文记录了安装过程经常出现的错误,并提供了解决办法,具有很好的实用性,是居家旅行必备之良品。 主要内容有: VirtualBox4.0的安装和配置 包括VirtualBox下网络环境的配置,和主机文件的共享,主机和虚拟机剪贴板共享等内容。 http://peterwei.javaeye.com/blog/968815 Ubuntu10下JDK1.6安装 http://peterwei.javaeye.com/blog/968758 Ubuntu10下Tomcat7安装 http://peterwei.javaeye.com/blog/968774 Ubuntu10下Eclipse3.6安装 http://peterwei.javaeye.com/blog/975129 Ubuntu10下Nginx-0.8.54安装 http://peterwei.javaeye.com/blog/969991 Ubuntu10下Apache-2.2安装 http://peterwei.javaeye.com/blog/975122 Ubuntu10下Mysql-5.1.56安装 http://peterwei.javaeye.com/blog/976422 Ubuntu10下Memcached-1.4.5安装 http://peterwei.javaeye.com/blog/974445 Ubuntu10下SSH2协议安装 http://peterwei.javaeye.com/blog/976944 Ubuntu10下Subversion安装 http://peterwei.javaeye.com/blog/976916 Ubuntu10下中文输入法安装 http://peterwei.javaeye.com/blog/976908 Ubuntu Linux实用命令 http://peterwei.javaeye.com/blog/976950 当然,最后也提供了PDF格式的附件统一下载,方便大家查看。下载后觉得不错的,不要吝啬你的掌声。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值