在linux下手动安装 apache, php, mysql--终极版

在linux下手动安装 apache, php, mysql: 参考: http://www.cnblogs.com/lufangtao/archive/2012/12/30/2839679.html

卸载dnf安装的httpd:

纯文本照样可以做到 "有格式的", 通过 "缩进, 空格, tab, 连字符如- , : , ... 等" . 有一个基本原则就是做到 按行 为单位 进行处理.
如: checking whether we are cross compiling... no

configure 不是系统提供的, 默认的命令, 只是在 软件安装包中提供的一个配置命令, 它本身有 帮助文档! 可以通过 ./configure --help 来查看如何进行配置.
比如: features options(--disable-.., --enable-...), directory options, install options等等, 通用的如: --slient, --quiet, -q, -n, --version等等.
其中安装路径, 如果用

dnf的安装路径是 直接在 /usr下, 包括: /usr/bin, /usr/sbin,


更加清楚linux 的目录结构了:

  1. 除了软件支持的目录外, 其他就是一些 系统运行所需要的支持 目录 / 和 用户的目录和辅助目录, 如: 系统运行所需要的支持目录, 如: /dev, /sys, /proc , /run ,/tmp, /var, /boot, 用户的目录包括: /root, /home, 辅助目录, 如/var, /media, /mnt, /opt, 配置目录/etc等
  2. 软件支持的目录, 总的来说, 包含几个部分: bin, sbin, lib(就是类/结构体/联合/枚举/常量const等的实现), include, src, share(资源文件,如js, css, pictures, assets,man, info等), 分为三级
    一是, 系统自带的 , 即使是最小化安装, 也有的 部分, 主要是指根目录下的几个目录, 包括: /bin, /sbin, /lib
    二是, 工具dnf安装的, 主要放在/usr下面, 包廓: /usr/bin, /usr/sbin, /usr/lib, /usr/share, /usr/libexec等
    三是, 用户自己通过源码安装的, 主要放在/usr/local下面, 根据你自己的 configure设置, 可以放在 local下的不同目录中, 如: /usr/local/apache2等等.
    总之, 就是 系统自带的软件除外, /usr是最主要的 (也不是必须安装 在 这里的, 有的就安装在 /home/softName/中)软件安装地方/

./configure下设置安装地址的选项是 --prefix, 不是 --with-prefix, --with通常跟需要的模块指定地址..


关于linux shell中的大括号? 注意和php中的\({}, {\)...} 相区别

  1. "{\(var1} "不同于php中的写法, 在php中 "{\)var1}" 表示的是, 一个变量. 而shell中则没有这样的含义, 大括号会原样输出;
  2. ${var} 则具有特殊的含义, 大括号表示对变量的特殊运算! 比如 :0:5 冒号表示借取; 而#号和% 也表示 "删除并截取".
  3. 因为表示表里的符号是\(, 而# 在\)前面, % 在\(后面, 所以 `\){var#/} 表示删除/左边的内容, ${var%/}`表示删除/ 右边的内容.
  4. 一个#表示最小匹配, 两个## 表示最大/最多匹配 删除的内容总是用* 表示, 如果是删除左边的内容, 则星号在删除 标示符的左边, 如果删除右边的内容, 则星号在标示符的右边.
    参考: http://www.jb51.net/article/64804.htm

从/usr/local/apache2/apr-1.6.2/include/ 可看出, 里面正是 传统的 c语言的 头文件! .h文件
在 apr_dso.h 头文件中, 有预编译语句 #infdef APR_DSO_DOT_H #define APR_DSO_DOT_H
同时,有类型定义语句, typedef struct apr_dso_handle_t 注意, 类型定义语句, 跟 定义 一个 变量的语句相类似.. 如: int x; typedef int WIDTH

html
内容(Markdown编辑器) 查看自动保存内容
C 语言的预编译, 编译和链接?
编译的时候, 是将.c文件 生成.o的目标文件, 这个是"预制件", 是任何程序都可以直接使用的 "材料" , 所以叫共享库文件. 如果c文件是沙子, 水泥, 粘土, 那么.o文件就是 砖块, 水泥砖等.
链接就是最终生成 可执行文件, 生成 "最终产品"了.
预编译, 根据语法要求, 凡是用 # 号开头的都是 预编译 , 包括 #define ... #include... #ifdef #ifndef 等等.
预编译都不是可执行 的语句 ! 所以 都不用 加分号(c语言中, 凡是加分号; 的都是 要执行的语句)
预编译 都是 "替换" , 都是用来 替换的! 比如: include ... 就是将该包含文件的内容放在这里进行替换, 因为只是替换, 所以 不是执行语句, 所以不加分号
另外, 因为 预编译都是替换, 比如 # define, 都是 要放在 一个语句中间 的! 你不会在一个语句的中间去加上分号.


有很多形式的httpd的配置 选项, 总的来说, 记住这几个就好了: (因为其他很多选项和features, 使用默认的就好了, 比如: --enable-dir, --enable-alias)

--prefix,
--enable-so
--enable-rewrite
--enable-modules=most
这种配置选项, 可以说是到处都可以轻易地找到. 因为2.2.x的版本, (虽然也支持worker和event模式 , 但是默认的)是prework多子进程 单线程模式, 所以可以不用配置 --with-mpm=prefork, 从 ./configure --help 命令的帮助 就可以看出...

在配置时, 如果 在 最后 没有出错信息 提示, 而且在 软件目录下有 Makefile文件和 每个模块目录下都 有 Makefile文件, 就说明配置正确

编译生成的 .o, .a, .lo, .la等文件

.o文件就是make的目标, 生成的obj目标文件, 相当于 提供函数和接口的 中间件,中间成品, 多个.o文件 链接就成为 可执行的 软件.
.a 是 archive文件, 是多个.o文件的打包 集合文件. 即常说的静态库
.lo, 和 .la是使用 libtool 生成的 .o文件和.a文件的 描述文件.
libtool 只和 .lo和.la文件打交道, 将复杂的编译工作 做了抽象和 多平台封装...
make的目标文件Makefile的写法参考: 大器晚成的: http://www.cnblogs.com/luchen927/archive/2012/02/05/2339002.html

### make只是生成了一些文件, 并没有拷贝文件到 安装目录, 因此 还必须使用 make install来拷贝到目标安装目录. 当然, make install还做了大量的 很多的 工作, 包括: 使用 libtool, mkdir , 还有其他很多的install安装工作等等..

httpd的官方上下载的 在这个版本的httpd-2.2.34中 , 本身就包含了 apr和apr-util的依赖包. 在make和make install 的时候, 就安装好了, 所以 并不需要 在安装httpd前 事先安装apr和apr-util. 但是并不是所有的 下载的 httpd包都包含了apr和apr-util的, 有的还需要事先安装apr等, 要视具体的情况而定.

为了避免每次都要完整的 写出启动路径, 可以将 httpd 做一个链接 到 /usr/sbin中: ln -s /usr/local/apache2/bin/httpd /usr/sbin/http 因为httpd是 服务器deamon所以, 最好是放在 /usr/sbin下. 而不是 bin下

### 在shell中, 运行命令, 如果 "直接写 命令名称" 不是使用 的 "./命令名称" , 但是 如果不是在 系统规定的 PATH 中, 即使 当前路径中有这个命令, 它也不认! 因为shell总是从 \(PATH 指定的那几个目录中去搜索命令, 进行执行. 如果当前命令所在目录 没有在\)PATH 中, 就要用 ./命令名 的方式执行. 或者是把 路径加入到 PATH 中 .

export的意思和作用?

  1. 使用 export 就是要理解shell 变量的作用域 和生命期
  2. 每次用./script.sh的方式执行 一个脚本的时候, 是 "新开一个子shell来执行" , 其实是新创建了一个子shell, 只是你看不到的话. 而source, 和点命令, 则是 直接在当前shell中执行, 不会新开 子shell.
  3. 在新开的子shell中执行脚本的时候, 会把父shell中的 "系统环境变量" 复制到子shell中, 使用 export == "输出", "输出到 子shell中" == "将变量设置为 当前 shell的 系统环境变量,
  4. 所以, 如果不使用 export, 那么一个 shell中的 变量 只是 "局部变量" 它的作用域就只是当前 shell, 在 子shell中就无效!

参考:

每次新启动一个 shell的时候, 总是 先执行 /etc/bashrc, 然后执行用户的环境配置文件 sourc ~/.bashrc. 因为是 source, 所以, .bashrc中的变量 如新增/修改的 PATH变量, 会自动在 当前shell 中生效, 所以 你可以不用 export, **当然 如果你使用了 export会更好, ** 因为这时候, 这个变量不只是会在 当前shell中生效, 甚至 在当前shell中 新开的 子shell中(如执行一个用户自定义 脚本)也是有效的, 否则 就不会在子shell中有效!


自己手动源码安装php?

  1. 如果没有安装php, 那么htdocs下的php文件对apache来说, 就是透明的, "无视的", "好像不存在一样"

  2. php的版本问题 , 用的最多的还是php5, 但是php5.2 没有多少新特性(特别是oop), 技术已经过时; 一般php5.3 加入了很多新特性, 特别是对oop的支持, 稳定版本是 php5.3.28. 但是 php5.4 做了一些优化, 速度更快, 内存占用更少. 现在用的较多的是:: php 5.5.x

  3. 下载地址: php.net/downloads.php, .../from/a/mirror China: cn2.php.net

如何启动httpd?

  1. 你可以直接使用 htttpd, 不带参数的话, 就是直接启动
  2. 或者, 显式的启动是: httpd -k start|stop|restart 等等.
  3. 一般 在 ./configure 的时候, 就会检查 软件的 dependencies 依赖性, 如果依赖性不满足, 就会报错, 配置不会通过.

安装php时的出错问题?

  1. dnf使用163的仓库源时, 可能遇到很干脆的返回, 是因为163的服务器上把低版本的23版本源给删除了, 可以使用更高的版本源, 比如是25的同样可以.

  2. 很多软件都提供了 软件和该软件的devel, 有些需求的问题可能 是 在 该软件的devel衍生软件中, 如libxml2, libxml2-devel

  3. 遇到 php配置时提示 没有 xml-config, 提示检查 libxml2库, 其实libxml2库已经安装, 这个 xml-config是 在 libxml2-devel.

手动源码安装php时, 怎么没有php的配置文件?

  1. php的配置文件是 php.ini
  2. php不像apache, 有自己专门的 配置目录, 如 conf/httpd.conf, 它没有自己的配置目录,
  3. 它的配置文件, 需要自己写, 或者 在 下载的源码src 中 , 有两个 : php.ini-development, php.ini-production , 把其中的一个拷贝到 lib中就可以了
  4. php.ini放的位置 应该是: /usr/local/php5.5/lib/下面, 即$prefix/lib/ 下.

posted @ 2017-09-15 12:19  noitanym  阅读(802)  评论(0编辑  收藏  举报