分类 Linux运维 下的文章

lnmp环境中,php算是最难安装的一个了,之前各种鼓捣搞了好多次,查阅了无数资料才终于有点经验了,记录下来。

一、安装依赖项

php的依赖项相当多,大部分都是运行环境需要的库环境。有的直接yum 就能安装,有的就需要手动编译安装了。反正一个原则:能用yum安装的尽量用yum。

yum install gcc bison bison-devel zlib-devel libmcrypt-devel mcrypt mhash-devel \
    openssl-devel libxml2-devel libcurl-devel bzip2-devel readline-devel libedit-devel \
    sqlite-devel jemalloc jemalloc-devel -y
    
yum install libpng-devel libjpeg-devel libxslt libxslt-devel \
    libmcrypt-devel mhash mcrypt -y

- 阅读剩余部分 -

之前在wordpress上有写过一篇安装的步骤:源码编译安装nginx

但是今天找到了一个更简单的方法,简单几步就能装好:

  • 解决依赖关系和添加用户
# 安装依赖项
## centos
yum install prce pcre-devel openssl openssl-devel -y
## ubuntu
apt-get install openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev
 
# 添加用户
useradd www -s /sbin/nologin -M
  • 下载安装
wget http://mirrors.163.com/nginx/debian/pool/nginx/n/nginx/nginx_1.12.2.orig.tar.gz
tar -zxvf nginx_1.12.2.orig.tar.gz
cd nginx-1.12.2
./configure --user=www --group=www --prefix=/usr/local/nginx-1.12.2 --with-http_stub_status_module --with-http_ssl_module
make && make install
ln -s /usr/local/nginx-1.12.2/ /usr/local/nginx
  • 添加配置文件和服务

添加配置文件目录:

mkdir /etc/nginx
cp /usr/local/nginx/conf/* /etc/nginx

然后复制以下内容到/etc/init.d/nginx

#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15
# description:  NGINX is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /etc/nginx/nginx.conf
# config:      /etc/sysconfig/nginx
# pidfile:     /var/run/nginx.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE="/etc/nginx/nginx.conf"

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

make_dirs() {
   # make required directories
   user=`$nginx -V 2>&1 | grep "configure arguments:.*--user=" | sed ''s/[^*]*--user=\([^ ]*\).*/\1/g'' -`
   if [ -n "$user" ]; then
      if [ -z "`grep $user /etc/passwd`" ]; then
         useradd -M -s /bin/nologin $user
      fi
      options=`$nginx -V 2>&1 | grep ''configure arguments:''`
      for opt in $options; do
          if [ `echo $opt | grep ''.*-temp-path''` ]; then
              value=`echo $opt | cut -d "=" -f 2`
              if [ ! -d "$value" ]; then
                  # echo "creating" $value
                  mkdir -p $value && chown -R $user $value
              fi
          fi
       done
    fi
}

start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    make_dirs
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    configtest || return $?
    stop
    sleep 1
    start
}

reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}

force_reload() {
    restart
}

configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}

rh_status() {
    status $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac
  • 启动服务
service nginx start

sudo: **: command not found的解决方法

使用sudo 命令以root 身份运行命令vi 时报错:

sudo: vi: command not found

百度一番发现使用sudo 执行命令时,它只会去找系统内置已经拥有的命令,也就是说系统智慧在默认的PATH 目录下去寻找,另外添加的PAHT 不会去查找。同时,对于命令别名系统也不会去执行。

因为下午重装了vi ,直接把bin 目录包含在PATH 中,root用户可以运行,但是sudo 无法运行。解决的方法就是在/usr/bin/ 目录下给vi 命令创建软链接:

ln -s /usr/local/vim/bin/vim /usr/bin/vi
ln -s /usr/local/vim/bin/vim /usr/bin/vim

一、df命令

df 命令用来查看各个磁盘占用空间大小,默认以字节为单位,可以添加-h 选项以合适的单位显示。

[ma@ma ~]$ df
Filesystem        1K-blocks     Used    Available Use% Mounted on
/dev/vda1          41151808  5702332     33352428  15% /
tmpfs                961040        0       961040   0% /dev/shm
/dev/vdb1          20511244 12006916      7455760  62% /data
/dev/vdc1          20511244    82052     19380624   1% /disk1
ossfs          274877906944        0 274877906944   0% /ossdata
[ma@ma ~]$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G  5.5G   32G  15% /
tmpfs           939M     0  939M   0% /dev/shm
/dev/vdb1        20G   12G  7.2G  62% /data
/dev/vdc1        20G   81M   19G   1% /disk1
ossfs           256T     0  256T   0% /ossdata

二、du命令

du 命令用来统计文件大小,-h 选项以合适单位显示,-s 选项显示总计可以统计文件夹大小:

[ma@ma test]$ du -h
8.0K    ./.git/info
4.0K    ./.git/branches
4.0K    ./.git/refs/tags
8.0K    ./.git/refs/remotes/origin
12K    ./.git/refs/remotes
8.0K    ./.git/refs/heads
28K    ./.git/refs
4.0K    ./.git/objects/info
8.0K    ./.git/objects/f0
4.0K    ./.git/objects/pack
8.0K    ./.git/objects/03
8.0K    ./.git/objects/69
36K    ./.git/objects
48K    ./.git/hooks
8.0K    ./.git/logs/refs/remotes/origin
12K    ./.git/logs/refs/remotes
8.0K    ./.git/logs/refs/heads
24K    ./.git/logs/refs
32K    ./.git/logs
180K    ./.git
12K    ./test
204K    .
[ma@ma test]$ du -hs  # 统计所有文件的总计大小
204K    .

可以使用du -hs * 分别统计各个文件和文件夹的大小:

[ma@ma test]$ tree
.
├── 2.md
├── README.md
└── test
    ├── 2.md
    └── README.md

1 directory, 4 files
[ma@ma test]$ du -sh * # 统计各个文件个文件夹大小
4.0K    2.md
4.0K    README.md
12K    test

升级GCC后运行程序出现错误:

/usr/lib64/libstdc++.so.6: version "CXXABI_1.3.9" not found

问题的原因是因为升级GCC后相应的动态库没有更新,程序找不到新版本GCC库中的符号,运行不成功。

使用ls 命令查看该文件可以看到动态库是一个软链接:

> ls -l /usr/lib64/libstdc++.so.6
lrwxrwxrwx 1 root root 19 Aug 24 12:28 /usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.13

- 阅读剩余部分 -

一直以来都是执着于源码安装,今天终于说服自己摆脱这个“不良嗜好”了。

使用二进制包安装比源码编译安装要简单得多,时间也短得多,何乐而不为呢。。。

二进制包安装MySQL的步骤和源码编译安装的步骤差不多,只是少了编译的流程,直接解压就能使用。

- 阅读剩余部分 -

“挂起”是虚拟机里面常用的操作,也是一个非常实用的功能。挂起和关机不同,挂起是把当前的系统状态都封存起来,相当于游戏里面的存档一样,下次直接从这里开始。而关机和平常的机器一样,关闭系统。

通常关闭虚拟机都会选择“挂起”而不是“关机”,因为关机了下次开启要等待一段时间,而挂起则不用,一来方便,二来省事。

但挂起后的一个问题是:系统被挂起后,系统的时间也被暂停,导致下次开启虚拟机时间不准确,需要手动输入命令同步。

每次都这样很麻烦,这里有个简单的方法可以解决这个问题。

- 阅读剩余部分 -

一、环境准备

1.1 安装包下载

所有的安装包可在http://mirror.team-cymru.com/gnu/找到。

GCC下载地址:GCC7.2.0,三个主要依赖组件下载地址:mpfr-4.0.1mpc-1.0.3gmp-6.1.2

1.2 安装依赖项

使用yum安装的依赖项:yum install -y glibc-headers gcc-c++ automake autoconf

对于gmp, mpfr和mpc三个依赖包,如果想偷懒就使用下面的命令一键安装:

sudo yum install -y  gmp-devel mpfr-devel libmpc-devel

建议使用yum自动安装,手动安装麻烦且费时。

这三个组件还可以使用官方提供的安装脚本安装:./contrib/download_prerequisite,比较耗时。

安装gmp

wget http://mirror.team-cymru.com/gnu/gmp/gmp-6.1.2.tar.xz
tar -Jxvf gmp-6.1.2.tar.xz
cd gmp-6.1.2
./configure --prefix=/usr/local/gmp-6.1.2
make && make check
sudo make install
sudo ln -s /usr/local/gmp-6.1.2 /usr/local/gmp

安装mpfr

wget http://mirror.team-cymru.com/gnu/mpfr/mpfr-3.1.6.tar.xz
tar -Jxvf mpfr-3.1.6.tar.xz
cd mpfr-3.1.6
./configure --prefix=/usr/local/mpfr-3.1.6 --with-gmp=/usr/local/gmp
make && make check
sudo make install
sudo ln -s /usr/local/mpfr-3.1.6 /usr/local/mpfr

安装mpc

wget http://mirror.team-cymru.com/gnu/mpc/mpc-1.0.3.tar.gz
tar -zxvf mpc-1.0.3.tar.gz
cd mpc-1.0.3
./configure --prefix=/usr/local/mpc-1.0.3 --with-gmp=/usr/local/gmp --with-mpfr=/usr/local/mpfr
make && make check
sudo make install
sudo ln -s /usr/local/mpc-1.0.3 /usr/local/mpc

添加动态库到系统搜索路径

动态库的默认搜索路径都在/etc/ld.so.conf文件中,这个文件里面包含了/etc/ld.so.conf.d/目录下的所有文件。所以只要在这个目录下创建一个gcc的文件作为库的搜索路径就可以了。

sudo echo "usr/local/mpc/lib" > /etc/ld.so.conf.d/gcc.conf
sudo echo "/usr/local/mpfr/lib" > /etc/ld.so.conf.d/gcc.conf
sudo echo "/usr/local/gmp/lib" > /etc/ld.so.conf.d/gcc.conf
sudo ldconfig

- 阅读剩余部分 -