WSL-Ubuntu20.04 安装 Apache2.4 + MySQL8.0 + PHP7.2 和 PHP8.1 ,composer,git 开发环境

安装 Apache 2.4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install vim net-tools unzip curl wget
# 安装 Apache
$ sudo apt install apache2
# 修改 /etc/apache2/apache.conf

# <Directory /var/www/>
# Options Indexes FollowSymLinks
# AllowOverride None
# Require all granted
#</Directory>
# 为:
# <Directory /var/www/>
# Options FollowSymLinks
# AllowOverride All
# Require all granted
# </Directory>
$ sudo /etc/init.d/apache2 start

安装 MySQL-Server 8.0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 安装 MySQL8.0
$ sudo apt install mysql-server
# 启动 MySQL-Server
$ sudo /etc/init.d/mysql start
# 初始化 MySQL 密码
$ sudo mysqld --initialize --user=mysql --console
# 查看密码
$ sudo cat /etc/mysql/debian.cnf
# 使用 [client]密码登录
$ mysql -udebian-sys-maint -p
# 修改root密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
# 添加一个用户
mysql> CREATE USER '用户名'@'localhost' IDENTIFIED BY '密码';
# 设定密码
mysql> ALTER USER '用户名'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
# 授权
mysql> GRANT ALL PRIVILEGES ON *.* TO '用户名'@'localhost' WITH GRANT OPTION;
# 刷新权限
mysql> FLUSH PRIVILEGES;
# 查看用户表
mysql> select host,user,authentication_string from mysql.user;
# 退出
mysql> quit;

安装 PHP 7.2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 安装 PHP 存储库
$ sudo apt install software-properties-common
# 1. If you are using php-gearman, you need to add ppa:ondrej/pkg-gearman
# 2. If you are using apache2, you are advised to add ppa:ondrej/apache2
# 3. If you are using nginx, you are advised to add ppa:ondrej/nginx-mainline   or ppa:ondrej/nginx
# 添加 PPA
$ sudo add-apt-repository ppa:ondrej/php
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install \
libapache2-mod-php7.2 \
php7.2 \
php7.2-cli \
php7.2-common \
php7.2-curl \
php7.2-fpm \
php7.2-imagick \
php7.2-json \
php7.2-mbstring \
php7.2-mcrypt \
php7.2-sqlite3 \
php7.2-xml \
php7.2-zip \
php7.2-mysqli \
php7.2-gd

# 在Apache中启用php7.2-fpm
$ a2enmod proxy_fcgi setenvif
$ sudo a2enconf php7.2-fpm
$ sudo /etc/init.d/apache2 restart

安装 PHP8.1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 安装 PHP8.1
$ sudo apt install libapache2-mod-php8.1 \
php8.1 \
php8.1-apcu \
php8.1-cli \
php8.1-common \
php8.1-curl \
php8.1-fpm \
php8.1-gd \
php8.1-imagick \
php8.1-mbstring \
php8.1-sqlite3 \
php8.1-xml \
php8.1-yaml \
php8.1-zip \
php8.1-mysql

# 启用 a2enconf php8.1-fpm,不是必要的
$ sudo a2enconf php8.1-fpm
# 修改 php8.1-fpm 的 Unix Domain Socket 方式为 TCP Socket方式,监听端口为 9001
# 编辑 /etc/php/8.1/fpm/pool.d/www.conf
# 注释掉 #listen = /run/php/php8.1-fpm.sock
# 添加一行 listen: 127.0.0.1:9001
$ sudo vim /etc/php/8.1/fpm/pool.d/www.conf

# 启动php8.1-fpm
$ sudo /etc/init.d/php8.1-fpm start
# 需要使用php8.1的.htaccess中加:
# <FilesMatch \.php$>
# SetHandler "proxy:fcgi://127.0.0.1:9001"
# </FilesMatch>

# 切換 php-cli 版本
# 为了和CentOS的php81同名
# sudo ln -s /usr/bin/php8.1 /usr/bin/php81

# 切换到php7.2
$ sudo update-alternatives --set php /usr/bin/php7.2
# 或者
$ sudo ln -sf /usr/bin/php7.2 /etc/alternatives/php
# 切换到php8.1
$ sudo update-alternatives --set php /usr/bin/php8.1
# 或者
$ sudo ln -sf /usr/bin/php8.1 /etc/alternatives/php

测试是否正常

1
2
3
4
5
6
7
8
# 查看网络监听,
# localhost:9001 =>PHP8.1
# localhost:mysql =>MySQL8.0
# [::]http => Apache2.4
# /run/php/php7.2-fpm.sock => PHP7.2
# 已全部正常启动
$ netstat -a

安装 composer

1
2
3
4
curl  https://getcomposer.org/installer -o composer-setup.php
php composer-setup.php
chmod +x composer.phar
sudo mv composer.phar /usr/local/bin/composer

安装 GIT

1
sudo apt install git

安装 npm

1
sudo apt install npm

开启 SSL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 开启SSL
$ sudo a2enmod ssl
$ sudo a2ensite default-ssl
$ sudo /etc/init.d/apache2 restart
# 本地自签证书
# 使用 mkcert : https://github.com/FiloSottile/mkcert
PowerShell> mkcert -install locahost
# 会生成 localhost.pem和localhost-key.pem
#
$ sudo vim /etc/apache2/sites-available/default-ssl.conf
# 修改内容,这里用的是windows用户名下文件位置,也可以复制到 wsl 下
#SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
#SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
SSLCertificateFile /mnt/c/Users/用户名/localhost.pem
SSLCertificateKeyFile /mnt/c/Users/用户名/localhost-key.pem

常见问题

  1. PHP在使用chmod时出现 chmod(): Operation not permitte
1
2
3
4
5
6
7
8
9
10
11
12
13
#/etc/wsl.conf
#同时解决/mnt/c,d...等默认0777权限问题,在/etc/wsl.conf(如果没有就新建)编辑如下内容:
[automount]
enabled = true
root = /mnt/
options = "metadata,umask=22,fmask=111"
mountFsTab = true
[filesystem]
umask = 022
# 关闭WSL再重启
# Windows PowerShell> wsl --shutdown.
# 不出意外就正常了。
# 如果不能解决 sudo chown www-data:www-data uploads 临时解决出错
  1. 启动服务
1
2
3
4
5
6
7
8
9
10
$ sudo vim /usr/local/bin/startup
#----内容-----
/etc/init.d/mysql start
/etc/init.d/php8.1-fpm start
/etc/init.d/php7.2-fpm start
/etc/init.d/apache2 start
#---------
$ sudo chmod a+x /usr/local/bin/startup
# 以后启动用 sudo startup启动
# 或者在windows下 wsl -d Ubuntu -u root
  1. SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client
1
mysql> ALTER USER '用户名'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';
  1. Could not instantiate mail function.

安装 sendmail或者postfix

1
2
3
$ sudo apt install sendmail
# 或者
$ sudo apt install postfix
  1. sql_mode 引起的SQL错误 (应该是旧SQL语法不够严谨)
1
2
3
4
# 查看MySQL 的 sql_mode
mysql > select @@sql_mode;
# 默认值
# ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

* ORDER BY clause is not in GROUP BY clause and contains nonaggregated *

原因: MySQL被Oracle收购后从MySQL5.7开始这个 ONLY_FULL_GROUP_BY 和 Oracle 一样,要求 SELECT 列一定要在 GROUP BY 中 ,或者本身是聚合列(SUM,AVG,MAX,MIN)
解决办法:去掉 ONLY_FULL_GROUP_BY 解除限制

* Invalid datetime format: 1292 Incorrect datetime value: ‘0000-00-00 00:00:00’ *

原因 :timestamp 要求 ‘1970-01-01 08:00:00’ 开始的时间格式或者 NULL
解决办法: 去掉 NO_ZERO_IN_DATE,NO_ZERO_DATE ,或者把 0000-00-00 00:00:00 改成 NULL 或者 ‘1970-01-01 08:00:00’

* SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column … *

原因: INT 类型不能给 “” 空值,
解决办法: 改成INT值,或者去掉 STRICT_TRANS_TABLES

1
2
3
4
5
$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
# 如果没有sql_mode加一行
sql_mode=ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
$ sudo /etc/init.d/mysql restart

Ubuntu (WSL) chmod(): Operation not permitted

Ubuntu20.04 (WSL) 在PHP中chmod时出现:
chmod(): Operation not permitted

或者中文

chmod(): 此項操作並不被允許

解决办法:

1
2
3
4
5
# 如果出现 umount: /mnt/c: target is busy.退出已打开的编辑器和目录浏览,并执行: cd 
$ cd
$ sudo umount /mnt/c
$ sudo mount -t drvfs C: /mnt/c -o metadata

ubuntu下安装postfix+mysql+dovecot

ubuntu

1
2
3
4
5
6
7
8
9
10
# 更新系统
$ apt update
# 查看系统版本
$ uname -a
# Linux 3fd33fb882db 5.8.0-53-generic #60~20.04.1-Ubuntu SMP Thu May 6 09:52:46 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

# 因为我基于docker安装的ubuntu缺少一些工具

$ apt install iputils-ping vim net-tools telnet

新建mysql数据库 (已安装mysql-server,使用docker另一个mysql容器)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 创建postfix用户,数据库和数据表,
mysql> CREATE DATABASE postfix;
# 选择postfix;
mysql> USE postfix;
# 创建postfix用户密码
mysql> CREATE USER postfix@'%' IDENTIFIED BY 'postfix';
# 指派权限
mysql> GRANT SELECT ,INSERT ,UPDATE ,DELETE ON postfix.* TO 'postfix'@'%';
# 刷新
mysql> FLUSH PRIVILEGES;
# 创建 domains表
mysql> CREATE TABLE domains (domain varchar(50) NOT NULL,PRIMARY KEY (domain));
# 创建 forwardings表
mysql> CREATE TABLE forwardings (source varchar(80) NOT NULL,destination TEXT NOT NULL,PRIMARY KEY(source));
# 创建 users表
mysql> CREATE TABLE users (email varchar(80) NOT NULL,`password` varchar(64) NOT NULL, quota int(10) default '104857600' , PRIMARY KEY (email));
# 创建 transport表
mysql> CREATE TABLE transport (domain varchar(128) NOT NULL default '',transport varchar(128) NOT NULL default '',UNIQUE KEY domain (domain));

测试数据

1
2
3
4
5
6
7
8
# 域名
mysql> insert into domains values ('postfix.local');
# 邮箱用户
mysql> insert into users values ('[email protected]',ENCRYPT('user1'),104857600);
# 创建邮件转发,多个邮箱地址使用,隔开
mysql> insert into forwardings values('[email protected]','[email protected],[email protected]');
# 转发所有邮件到另外的邮件服务器
#INSERT INTO transport VALUES ('domain.com', 'smtp:server2.domain.com');

安装postfix

1
2
3
4
5
6
7
8
9
10
11
12
#安装依赖
$ apt install openssl telnet libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql

# 安装postfix
$ apt install postfix postfix-mysql postfix-doc mailutils

# General type of mail configuration 输入数字 2 (Internet Site)
# System Mail Name 输入 postfix.local
# Geographic area 时区输入数字 6 (Asia)
# Time Zone 输入数字 70 (Shanghai)


修改配置

虚拟domain配置文件

1
$ vim /etc/postfix/mysql-virtual-domains.cf

内容:

1
2
3
4
5
user = postfix
password = postfix
dbname = postfix
query = SELECT domain AS virtual FROM domains WHERE domain = '%s'
hosts = 172.18.0.136

虚拟forwarding配置文件

1
2
$ vim /etc/postfix/mysql-virtual-forwardings.cf

内容

1
2
3
4
5
user = postfix
password = postfix
dbname = postfix
query = SELECT destination FROM forwardings WHERE source='%s'
hosts = 172.18.0.136

虚拟mailbox配置文件

1
$ vim /etc/postfix/mysql-virtual-mailboxes.cf

内容

1
2
3
4
5
user = postfix
password = postfix
dbname = postfix
query = SELECT CONCAT(SUBSTRING_INDEX (email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s'
hosts = 172.18.0.136

虚拟email2email配置文件

1
vim /etc/postfix/mysql-virtual-email2email.cf

内容

1
2
3
4
5
user = postfix
password = postfix
dbname = postfix
query = SELECT email FROM users WHERE email='%s'
hosts = 172.18.0.136
1
$ vim /etc/postfix/mysql-virtual-mydestination.cf

内容

1
2
3
4
5
6
7
user = postfix
password = postfix
dbname = postfix
table = transport
select_field = domain
where_field = domain
hosts = 172.18.0.136

修改配置文件权限

1
2
3
4
5
# 修改/etc/postfix/mysql-virtual-*.cf 用户组为postfix
$ chgrp postfix /etc/postfix/mysql-virtual-*.cf
# 禁止other用户访问
$ chmod o= /etc/postfix/mysql-virtual-*.cf

创建证书

1
2
3
4
5
6
7
8

$ mkdir /etc/postfix/certs
$ cd /etc/postfix/certs
# 创建证书
$ openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509
# 修改权限
$ chmod o= smtpd.key

创建用户

1
2
$ groupadd -g 5000 vmail
$ useradd -c 'vmail' -g vmail -u 5000 vmail -d /home/vmail -m

使用postconf 配置main.cf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
$ postconf -e 'myhostname = postfix.local'
$ postconf -e 'mydestination = localhost , proxy:mysql:/etc/postfix/mysql-virtual-mydestination.cf'
$ postconf -e 'mynetworks = 127.0.0.0/8, 172.18.0.125'
$ postconf -e 'message_size_limit = 30720000'
$ postconf -e 'virtual_alias_domains ='
$ postconf -e 'virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual-forwardings.cf, mysql:/etc/postfix/mysql-virtual-email2email.cf'
$ postconf -e 'virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual-domains.cf'
$ postconf -e 'virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual-mailboxes.cf'

$ postconf -e 'virtual_mailbox_base = /home/vmail'
$ postconf -e 'virtual_uid_maps = static:5000'
$ postconf -e 'virtual_gid_maps = static:5000'
$ postconf -e 'smtpd_sasl_auth_enable = yes'
$ postconf -e 'broken_sasl_auth_clients = yes'
$ postconf -e 'smtpd_sasl_authenticated_header = yes'
$ postconf -e 'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination'
$ postconf -e 'smtpd_use_tls = yes'
$ postconf -e 'smtpd_tls_cert_file = /etc/postfix/certs/smtpd.cert'
$ postconf -e 'smtpd_tls_key_file = /etc/postfix/certs/smtpd.key'

# 以下为同一行
$ postconf -e 'proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks '
# 以上为同一行

#其它参考
# queue_run_delay = 3s //每3s扫描一次delay的邮件
# minimal_backoff_time = 3s //在3s内不会重发delay的邮件
# maximal_backoff_time = 6s //在6s内则一定会重发邮件
# maximal_queue_lifetime = 12s //邮件超过12s没有发出,则退信
# smtpd_sasl_auth_enable = yes //启动SMTP认证
# smtpd_sasl_security_options = noanonymous //禁止匿名使用SMTP服务
# mynetworks = 127.0.0.1 //允许本服务器发送到外网地址
# smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination //定义地址过滤规则

$ postconf -e 'virtual_transport = dovecot'
$ postconf -e 'local_transport = dovecot'

配置saslauthd

1
2
$ mkdir -p /var/spool/postfix/var/run/saslauthd
$ cp -a /etc/default/saslauthd /etc/default/saslauthd.bak
1
$ vim /etc/default/saslauthd

内容

1
2
3
4
5
6
7
START=yes
DESC="SASL Authentication Daemon"
NAME="saslauthd"
MECHANISMS="pam"
MECH_OPTIONS=""
THREADS=5
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"
1
$ vim /etc/pam.d/smtp

内容

1
2
3
auth    required   pam_mysql.so user=postfix passwd=postfix host=172.18.0.136 db=postfix table=users usercolumn=email passwdcolumn=password crypt=1
account sufficient pam_mysql.so user=postfix passwd=postfix host=172.168.0.136 db=postfix table=users usercolumn=email passwdcolumn=password crypt=1

1
$ vim /etc/postfix/sasl/smtpd.conf

内容

1
2
3
4
5
6
7
8
9
10
pwcheck_method: saslauthd
mech_list: plain login
allow_plaintext: true
auxprop_plugin: sql
sql_engine: mysql
sql_hostnames: 172.18.0.136
sql_user: postfix
sql_passwd: postfix
sql_database: postfix
sql_select: select password from users where email = '%u@%r'

修改权限

1
2
$ chmod o= /etc/pam.d/smtp
$ chmod o= /etc/postfix/sasl/smtpd.conf

postfix加到sasl组

1
2
$ adduser postfix sasl

重启postfix ,saslauthd

1
2
$ /etc/init.d/postfix restart
$ /etc/init.d/saslauthd restart

ubuntu20 install php7.2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# update and upgrade

$ sudo apt update && apt upgrade
# install software-properties-common

$ sudo apt-get install software-properties-common

# add apt repository ppa:ondrej/php

$ sudo add-apt-repository ppa:ondrej/php
# install php7.2 and extensions
# optional: libapache2-mod-php7.2
# optional: php7.2-xdebug
$ sudo apt install php7.2 \
php7.2-cli \
php7.2-common \
php7.2-curl \
php7.2-fpm \
php7.2-gd \
php7.2-json \
php7.2-mbstring \
php7.2-mcrypt \
php7.2-mysql \
php7.2-opcache \
php7.2-sqlite3 \
php7.2-yaml \
php7.2-zip \
php7.2-dom
# enable startup php7.2-fpm
$ sudo systemctl enable php7.2-fpm
# start php7.2-fpm
$ sudo systemctl start php7.2-fpm
$ sudo systemctl status php7.2-fpm
$ sudo a2enmod proxy_fcgi setenvif
# enable rewrite
$ sudo a2emod enable rewrite
# enable php7.2-fpm
$ sudo a2enconf php7.2-fpm
$ sudo systemctl restart apache2
# 切換默認php命令 php7.2,php7.4 ...
update-alternatives --set php /usr/bin/php7.2

docker

mysql容器使用固定IP方法

1
2
3
4
5
6
# 创建自定网络
docker network create --subnet=172.18.0.0/16 mynetwork
# 指定使用的网络和ip运行mysql
docker run -p 33306:3306 --name mysql -v /home/jason/var/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=xxxxxx --net mynetwork --ip 172.18.0.136 -d mysql:5.6
docker run --name php -v /home/jason/webroot:/var/www/html --net mynetwork --ip 172.18.0.80 -itd sohophp/php-multi-apache:latest start

docker 减小体积生成新的镜像

Docker commit 每次都会加大镜像体积

解决办法:

使用Docker import 导入系统文件,丢弃镜像历史引用.

同样适用于全新安装系统生成docker镜像。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查看容器id, {container_id}
$ docker ps
# 开启一个{container_id}的交互式终端
$ docker exec -it {container_id} bash
$ cd /
# 清理,同时可以删除和清理其它
$ yum clean all && history -cw
# 查看/目录文件大小
$ du -h --exclude=/proc --exclude=/sys /
# 压缩成base.tar 排除/proc和/sys
# 在使用--exclude=/proc时会出错,所以使用 >/dev/null 可以看到错误消息
$ tar --exclude=/proc --exclude=/sys --exclude=/base.tar -cvf base.tar / >/dev/null
# 退出容器
$ exit

1
2
3
4
5
6
7
# 复制容器{ontainer_id}中的/base.tar文件到当前目录
$ docker cp {container_id}:/base.tar .
# 使用base.tar 生成{image_name} 镜像
$ cat base.tar | docker import - {image_name}
# 查看生成的镜像 (1.28G 转换后501Mb )
$ docker image ls

ubuntu20-001

取消鼠标中键粘贴功能

新建开机启动命令:

1
vim /etc/profile.d/xmodmap.sh

xmodmap.sh 内容如下:

1
2
3
4
#!/bin/sh
# 取消鼠标中键粘贴功能,
# 不输出错误消息 Warning: Only changing the first 8 of 10 buttons.
xmodmap -e 'pointer = 1 25 3 4 5 6 7 2' 2>/dev/null

优化开机启慢问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 列出开机启动占用时间长的服务
$ systemd-analyze blame

# 46.780s plymouth-quit-wait.service
# 关闭开机启动动画,反向操作用umask
sudo systemctl mask plymouth-quit-wait.service
# 关闭自动升级
sudo systemctl disable apt-daily.service
# 修改启动时选择系统的等待时间,默认10秒,修改为2秒
# GRUB_TIMEOUT=2
sudo vim /etc/default/grub
# 更新开机引导
sudo update-grub
# 设置开机分辨率,解决开机黑屏时间长,
sudo apt-get install v86d hwinfo
# 查看显示卡支持的分辨率
sudo hwinfo --framebuffer
# 修改grub加一行
# GRUB_GFXPAYLOAD_LINUX=1024×768x24
sudo vim /etc/default/grub
#启用framebuffer
echo FRAMEBUFFER=y | sudo tee /etc/initramfs-tools/conf.d/splash
#更新设置:
sudo update-grub
sudo update-grub2
sudo update-initramfs -u

# 安装经典桌面,解决卡顿
# 启动后登录画面选择 Gnome Flashback
sudo apt install gnome-session-flashback



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 查看硬盘读写速度
$ hdparm -t /dev/sdb

# 使用gparted把目标硬盘分区
# 查看现有硬盘分区情况
$ fdisk -l
# 目标硬盘分区为
# Device Boot Start End Sectors Size Id Type
# /dev/sda1 2048 1050623 1048576 512M b W95 FAT32
# /dev/sda2 1050624 250068991 249018368 118.8G 83 Linux
# 源硬盘分区为
# Device Boot Start End Sectors Size Id Type
# /dev/sdb1 * 2048 1050623 1048576 512M b W95 FAT32
# /dev/sdb2 1052670 625141759 624089090 297.6G 5 Extended
# /dev/sdb5 1052672 625141759 624089088 297.6G 83 Linux
# 把sdb5复制到sda2
$ dd if=/dev/sdb5 of=/dev/sda2
# 另外开个终端执行以下命令后。dd命令可以看到dd命令执行过程
$ watch -n 5 killall -USR1 dd

centos7 make install apache2.4 and php7.2

安装

1
2
3
4
5
# 安装开发环境
$ yum groupinstall "Development Tools"
# 安装工具
$ yum install wget

install apache-2.4.46

install apr and apr-util

https://apr.apache.org/download.cgi

1
2
3
4

$ wget https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-1.7.0.tar.gz
$ tar -zxvf apr-1.7.0.tar.gz

install apr and apr-util

1
2
3
$ wget https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-util-1.6.1.tar.gz
$ tar -zxvf apr-util-1.6.1.tar.gz

install apache

https://httpd.apache.org/download.cgi#apache24

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ su
$ mkdir /var/src
$ cd /var/src
$ wget https://downloads.apache.org/httpd/httpd-2.4.46.tar.gz
$ tar -zxvf httpd-2.4.46.tar.gz
$ cd httpd-2.4.46
$ ./configure --prefix=/usr/local/apache \
--sysconfdir=/etc/httpd24 \
--enable-so \
--enable-ssl \
--enable-cgi \
--enable-rewrite \
--with-zlib \
--with-pcre \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util/ \
--enable-modules=most \
--enable-mpms-shared=all \
--with-mpm=prefork

$ make && make install

install php

https://www.php.net/releases/

install php5.6

1
2
3
4
$ wget https://www.php.net/distributions/php-5.6.40.tar.gz
$ tar -zxvf php-5.6.40.tar.gz
$ cd php-5.6.40

install php5.5.6

1
$ wget https://www.php.net/distributions/php-5.5.6.tar.gz

install PHP5.4.44

https://www.php.net/distributions/php-5.4.44.tar.gz

SELinux

SELinux的策略与规则管理相关命令

getsebool

getsebool命令是用来查询SELinux策略内各项规则的布尔值。
SELinux的策略与规则管理相关命令:
seinfo命令、sesearch命令、getsebool命令、setsebool命令、semanage命令。

选项

-a:列出目前系统上面的所有布尔值条款设置为开启或关闭值。

实例
1
2
3
# 查看httpd相关设定
$ getsebool -a | grep httpd