生命不息
折腾不止

PHP8.0.X安装fileinfo扩展方法

王俊伟阅读(1214)

PHP8.0.X发布有一段时间了,但是各个PHP的扩展却跟不上步伐。

刚开始体验php8.0.X的时候想着没有扩展就自己动手装,能有多难呢?但是现实总是很残酷。

编译php的时候开启fileinfo扩展的时候一直提示安装失败,想着fileinfo编译会占用大量系统资源,可能是我的机器内存太小了,给了Swap分区依然失败,最后手工进行编译安装,依然失败,狠狠的打脸了。

然后我手工编译

继续失败,然后分析一下错误提示,use option -std=c99 or -std=gnu99 难道是makefile文件有错误,是fileinfo并不支持php8.0.X版本,我一脸问题,不支持你放在安装包里干什么?

分析了一下makefile文件,然后疯狂搜索解决办法,终于是找到的解决办法,现在分享出来给需要的朋友。

makefile第25行,CFLAGS = -g -02

在第25行里加入 -std=c99 效果如下:

竟然编译通过了,并且安装成功了!

具体操作如下:

使用操作系统:Centos 7.9,搭配环境:oneinstack 一键包为例,其它也应该是同样的方法。

下面是安装过程:

进入fileinfo扩展目录

cd /root/oneinstack/src/php-8.0.3/ext/fileinfo

对编译进行清理

make clean

正常编译安装

/usr/local/php/bin/phpize

./configure --with-php-config=/usr/local/php/bin/php-config

到这一步,fileinfo文件夹下应该生成了makefile文件,对makefile文件进行修改,

第25行

CFLAGS = -g -02 修改为 CFLAGS = -std=c99 -g -02 如下:

修改后保存文件

然后进行make && makeinstall

make && makeinstall

然后就顺利编译成功了!

最后查看一下有没有fileinfo.so文件。

然后加入到php.ini文件中,在oneinstack中是直接做fileinfo.ini文件

echo 'extension=fileinfo.so' > /usr/local/php/etc/php.d/ext-fileinfo.ini

然后重启php或是nginx或apache等,我这边php是以php-fpm方式运行,所以重启php就行了。

service php-fpm restart

php -m检查扩展,或是使用phpinfo查看,我这安装了探针。

已经安装完成了。

Centos下PHP7.2安装Mycrpt扩展的方法

王俊伟阅读(3715)

PHP的Mycrpt扩展从PHP 7.1.0 开始废弃,自 PHP 7.2.0 起,会移到 PECL。

但是有些程序依然会使用Mycrpt扩展,如果程序本身不解决这一问题,我们会得到如下错误提示:

那么我们如何解决这一问题呢!博主还是通过编译让php7.2也支持起来了Mycrpt扩展。效果如下:

请不要怀疑不是同一个phpinfo下的截图(:逃

下面是具体方法:

系统版本:Centos7.4 64bit

环境:使用一键包,oneinstack (请恕时间精力有限,没有测试别的环境或是一键包)

php版本:php7.2.6(没错,当然是最新的版本了)

下面开始安装

1.查看pcel上面的介绍

看样子是支持的嘛!

下面开始安装吧

ssh到服务器

先安装一下必要组件

yum install libmcrypt libmcrypt-devel mcrypt mhash

下载mcrypt

wget http://pecl.php.net/get/mcrypt-1.0.1.tgz

解压并进入目录

tar xzvf mcrypt-1.0.1.tgz && cd mcrypt-1.0.1

查找phpize

whereis phpize
phpize

以上是两条命令都要执行一下

查找php-config位置

whereis php-config

编译安装

./configure --with-php-config=/usr/local/php/bin/php-config

注意命令中php-config的目录

如果遇到错误提示如下:

configure: error: no acceptable C compiler found in $PATH

请先安装gcc,命令

yum install gcc -y

安装

make && make install

因为oneinstack对扩展引入是使用ini文件来进行的,找到php.d文件夹后即可进行操作

cd /usr/local/php/etc/php.d

写入一个mcrypt.ini文件,php会自动调用

echo 'extension=mcrypt.so' > mcrypt.ini

如果不是使用ini文件引入扩展,需要在php.ini文件里加入以下语句

extension=mcrypt.so

至此,扩展就安装完成了。

Centos安全漏洞修复:RHSA-2017:1615: kernel security and bug fix update漏洞预警及修复办法

王俊伟阅读(4111)

今天收到了阿里的短信,说是我的一台ECS安全漏洞,吓得我赶紧去看了一下。我是不关心云盾的(其实是用不起),从云盾上次升级后,我其实也没有太在意到底变成什么样子了。
因为下面这条消息,我不得不看看
 
提示有安全漏洞,然后点击前往云盾。

当我点击下图的漏洞待处理的时候,竟然提示我要升级到企业版才能查看,心中千万头XXX奔腾。

右上角提示可以试用云盾7天,我去,那赶紧试用看看到底是什么漏洞。开启试用,然后看到了漏洞信息


如果你是一个和我一样会时常更新系统的童鞋,那么,这个地方不要盲目的点击获取修复命令,因为命令完全没有用。
给出的命令是:

yum update kernel-devel

执行后提示:No packages marked for update
我们来看看细节

上面云盾提示命中命中: kernel-devel version less than 0:3.10.0-514.26.1.el7 
低于3.10.0-514.26.1.el7的内核版本都会命中,那只要内核版本在kernel-3.10.0-514.26.1.el7.x86_64及以上就不会有漏洞。
然后我登陆我的ECS,查看了我当前的内核版本

uname -a

显示我的内核版本是Linux  3.10.0-514.26.2.el7.x86_64 #1 SMP Tue Jul 415:04:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux,已经是高于26.1了,那为什么还会有提示
我们再看看云盾提示信息,更多里面显示路径为/usr/src/kernels/3.10.0-514.21.2.el7.x86_64。看完这个,我就懵了,这不是旧内核版本么?没有启动也会提示漏洞?
毕竟Linux小白,不深究了,下面直接上手修复。
首先,修复系统是CentOS Linux release 7.3.1611 (Core),本人无其它系统。此处不做探讨。
其次,要明白Centos在更新系统内核的时候,不会自动删除旧内核,会把旧内核文件留在/usr/src/kernels/这个目录里。
最后,我们来上手。

以下修复教程
1.明确自己的系统内核版本

uname -sr

如果版本低于Linux  3.10.0-514.26.1.el7.x86_64 ,请升级内核。此方法只说内核版本已最新,yum update提示No packages marked for update的情况。
2.查看旧内核版本

rpm -qa|grep kernel*

然后结果如下:

从上面看到了云盾提示的安全风险的内核版本
kernel-3.10.0-514.21.1.el7.x86_64
3.删除旧内核版本

yum remove kernel-3.10.0-514.21.2.el7.x86_64 kernel-devel-3.10.0-514.16.1.el7.x86_64 kernel-3.10.0-514.21.1.el7.x86_64 kernel-devel-3.10.0-514.21.2.el7.x86_64 kernel-3.10.0-514.16.1.el7.x86_64 kernel-devel-3.10.0-514.21.1.el7.x86_64

P.S.凶残的方法,直接删除所有低于26.1的旧内核。
4.重启系统

reboot

5.云盾验证

大概5分钟左右,验证成功


到此,漏洞修复成功!
总结:
1.平时更新系统后删除旧内核吧,保留一个上一版本的内核即可。
2.所幸新版云盾能试用七天,以后怎么办,不知道,可能世界加钱可及吧!
3.总之,保持系统更新应该是没有问题的!
别问我以后怎么办,钱能解决的问题都不是问题!

Mysql密码忘记修改办法,解决登陆mysql1045问题

王俊伟阅读(1975)

今天一个朋友的服务器在登陆phpmyadmin的时候提示1045错误,然后进入ssh后登陆数据库仍是1045错误。网上找了各种办法都不成功。

提示如下:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

首先我想到的是进入安全模式进行密码重置,虽没有成功, 但我还是附上方法:

1、停用mysql服务:

/etc/rc.d/init.d/mysqld stop
或者是
service mysqld stop

2、输入命令:

mysqld_safe --user=mysql --skip-grant-tables --skip-networking &

根据环境不同可能会不成功,提示你要进入mysql安装目录进行

那就找到安装目录,我这示例目录是  /alidata/server/mysql  这个常见于阿里服务器的一键安装包。

命令格式如下:

/alidata/server/mysql/bin/mysqld_safe --user=mysql --skip-grant-tables --skip-networking &

3、登入数据库:

这个地方特别注意一下,一定要新建一个ssh窗口,登陆这台服务器

mysql -u root mysql

没有密码直接进入mysql

4、进入mysql

 use mysql;

结果如下:
Database changed

5、更改root密码:

UPDATE user SET Password = password ( '新密码' ) WHERE User = 'root';

结果如下:

Query OK, 3 rows affected (0.00 sec) Rows matched: 3 Changed: 3 Warnings: 0
刷新数据库

FLUSH PRIVILEGES;

结果如下:
Query OK, 0 rows affected (0.00 sec)
千万不要忘记在mysql中操作的每条命令后面都要有“;”的。

最后退出

mysql> quit

重启mysql

/etc/rc.d/init.d/mysqld restart
或者是
service mysqld restart

用root登陆mysql

mysql -uroot –p
Enter password:新密码

登陆成功!

下面我要说的方法是上面这种方法不成功的时候的解决办法,这个才是本文的重点!

也不是什么新方法,很多人其实也都会的。

1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库。因为在修改的过程中任何人都可以登陆mysql修改用户密码的。

我的办法是停止了apache或是nginx服务。

2.编辑 my.cnf文件

vi /etc/my.cnf

如下图所示:

我们在[mysqld]的启动选项里面加入 skip-grant-tables 其实就是跳过授权表。

原代码如下:

[client]
port            = 3306
socket          = /tmp/mysql.sock
[mysqld]
port            = 3306
socket          = /tmp/mysql.sock
skip-external-locking
log-error=/alidata/log/mysql/error.log
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M

修改后如下:

[client]
port            = 3306
socket          = /tmp/mysql.sock
[mysqld]
port            = 3306
socket          = /tmp/mysql.sock
skip-grant-tables
#skip-external-locking
log-error=/alidata/log/mysql/error.log
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M

原文件里面有个 skip-external-locking 我在前面加了# 将它注释掉了!

好了,退出并保存

 

:wq!

3.重新启动mysqld

service mysqld restart

结果如下:
Stopping MySQL: [ OK ]
Starting MySQL: [ OK ]
4.登录并修改MySQL的root密码

mysql

结果如下:

 

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3 to server version: 3.23.56
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

 

 use mysql;

结果如下:
Database changed

更改root密码:

UPDATE user SET Password = password ( '新密码' ) WHERE User = 'root';

结果如下:

Query OK, 3 rows affected (0.00 sec) Rows matched: 3 Changed: 3 Warnings: 0
刷新数据库

FLUSH PRIVILEGES;

结果如下:
Query OK, 0 rows affected (0.00 sec)

5.将MySQL的登录设置修改回来

vi /etc/my.cnf

将刚才在[mysqld]的段中加上的skip-grant-tables删除,并把注释的部分改回来。
保存并且退出vi

6.重新启动mysqld

service mysqld restart

Stopping MySQL: [ OK ]
Starting MySQL: [ OK ]

 

最后启动刚才停止的服务

 

service httpd restart
service nginx restart

好了,进入phpmyadmin不再有1045提示了!

 

Centos安装epel、remi源

王俊伟阅读(2281)

CentOS虽然默认自带CentOS-Base.repo的源,但官方源中去除了很多有版权争议的软件,而且安装的软件也不是最新的稳定版。这种情况下就需要安装第三方源来弥补其中的不足,而且有好多的应用是依赖于第三方源的,下面天蝎就简单说一个Centos安装epel、remi的源来获取更好的软件体验。

1.安装epel

天蝎一直使用Vestacp这款面板,其中就依赖于epel源。

SSH登陆后在Centos下直接运行下面全集就可以进行安装了。

rpm -ivh http://mirrors.sohu.com/fedora-epel/epel-release-latest-6.noarch.rpm

或者使用

yum install epel-release

这样就完成了EPEL的安装。 

2.安装remi源 

在CentOS 7上: 

sudo rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi 
sudo rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm 

在CentOS 6上: 

sudo rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi 
sudo rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm 

也可试用下面这条命令

rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

默认地,REMI是禁用的。要检查REMI是否已经成功安装,使用这个命令。你会看到几个REMI仓库,比如remi、remi-php55和remi-php56。

yum repolist disabled | grep remi

如果你不希望默认使用remi源安装软件,那就保持禁用,使用的时候用如下命令来使用remi源

yum --enablerepo=remi search <keyword>
yum --enablerepo=remi install <package-name>
yum --enablerepo=remi update <package-name>

 

似水流年--王俊伟个人博客

联系博主关注我们