Linux root不能 ssh 登陆的问题

有的发行版的 ssh 配置限制了,需要修改以下几个地方。

vim /etc/ssh/sshd_config

    #PermitRootLogin without-password    #注释这句话
    PermitRootLogin yes                  #改为yes  然后重启ssh
    
service ssh restart

Mac 下 Parallels 虚拟机使用宿主机的网络代理

环境:

宿主:Mac
VM: Debian (linux系统都可以吧

步骤

  • 在宿主机的 shadowsocks 设置监听地址为 0.0.0.0 (默认是127.0.0.1)

  • 使用桥接方式运行虚拟机(使得虚拟机与宿主处于同一个局域网)

  • 进入linux系统,在 ~/.bashrc 或者 ~/.zshrc 设置代理:

      export ALL_PROXY=socks5://172.20.10.5:1086  # IP设置是你 Mac 的内网 IP 地址
        
      alias checkip="curl -i http://ip.cn"        # 查看本机外网 IP 归属地。
    
  • 测试是否成功。在命令行里运行下面的命令查看是否设置成功。

      checkip
    

Mac 下使用 homebrew 切换不同版本 php

最近刚切换回 Mac 下进行开发,所以写了比较多的 Mac 环境部署之类的文章。今天需要重新切换一下本地的开发环境。原本想直接在当前环境下开发, 毕竟 Mac 自带了 PHP 环境,今天需要新添一个扩展 freetype ,需要重新编译一遍 PHP。 由于这个扩展是核心内置扩展,没法通过phpize来编译安装。 解决办法只有一个,就是找到PHP的安装源码重新编译一下,在编译的时候,加上–with-freetype-dir。

但是要知道的一个事 —— Mac上PHP是内置的,根本就找不到它的安装源码在哪!

所以需要重新编译一遍 PHP,并且不影响 Mac 当前的 PHP 环境。

Mac 下软件的安装和管理,当然离不开 homebrew 了。

安装 php 不同版本

brew install php54
brew install php55
brew install php56
brew install php70

安装新版本时,你很大几率上会被提醒,php 已经安装了 xxx 版本了,你需要先 unlink 原先的版本。于是就是下面的这个命令了。先 unlink 再安装。 安装后自然就 link 好了。

常规切换

通过 brew 安装的 php 可以通过brew link和brew unlink来切换不同版本。

brew list
brew unlink php56
brew link php55

大版本可以用brew list来查,如果是小版本的话只能去/usr/local/Cellar/php55看了。这个时候使用php-version可以更方便一点。

homebrew 中有一个非常便于管理和切换 PHP 版本的工具 —— php-version.

php-version

安装php-version

brew install php-version

然后执行下面的命令。也可以讲下面这个命令放到 ~/.bashrc 或 ~/.zshrc 里去

source $(brew --prefix php-version)/php-version.sh && php-version xxx # xxx 是版本号

直接执行

php-version

就可以看到现有的版本,比如我自己的

➜  ~ php-version
      5.4.45
      5.5.38
      5.6.30
    * 7.0.20

然后使用以下命令切换即可

php-version 7.0.20

再看php的版本,已经切换好了。

php -v

注:我在早期时已经装好了 php7,今天切换版本的时候 php -v 一直没什么变化,误导了我。最后我先将这个 php70 版本 remove 后再 install, 就没问题了。

在 IDEA 中使用

虽然在终端里,php -v 已经是最新的7了。我原先 IDEA 里的 php 版本还是 5.6.30 的。这个改起来就很简单了。

在 Preference 里找到 php 的设置,讲原先的 /usr/bin/php 改为 /usr/local/bin/php 即可。

不同版本的配置

各版本的配置在目录

/usr/local/etc/php/xxx

里,根据需要设置即可。

安装扩展

假设我们要装5.6版本的 mcrypt 插件

brew search php56-mcrypt

brew install php56-mcrypt  #默认安装在`/usr/local/Cellar/`下

然后找到mcrypt.so 文件,通过pwd查看路径,接着编辑PHP配置文件(php.ini):

vi /usr/local/etc/php/xxx/php.ini  #通过brew默认配置文件路径

在php配文件增加代码:

extension=/usr/local/Cellar/php56-mcrypt/5.6/mcrypt.so

参考资料


使用 Proxifier 解决系统级的代理问题

先前有写过这样一篇文章《Fiddler 让 Win10 自带日历客户端连接谷歌账户》

然而 Fiddler 毕竟是跟踪流量用的,本业并不是代理,所以在代理设置上还是捉襟见肘的。 今天找到了 Proxifier 这个软件,就是为了代理而生的,非常好用。

先说一下使用场景,我目前的需求是在 Mac 下同步 Google Drive,虽然登录是没问题,然而连接就是失败,官方客户端也没有提供 http/socks 代理设置之类的,也是无语。于是就找到了这个东西。

介绍

Proxifier allows network applications that do not support working through proxy servers to operate through a SOCKS or HTTPS proxy and chains. The most advanced proxy client 。https://www.proxifier.com/index.htm

Proxifier是一款功能非常强大的socks5客户端,可以让不支持通过代理服务器工作的网络程序能通过HTTPS或SOCKS代理或代理链。支持 64位系统,支持Xp,Vista,Win7,MAC OS ,支持socks4,socks5,http代理协议,支持TCP,UDP协议,可以指定端口,指定IP,指定域名,指定程序等运行模式,兼容性非常好,和SOCKSCAP属于同类软件,不过SOCKSCAP已经很久没更新了,不支持64位系统。 有许多网络应用程序不支持通过代理服务器工作,Proxifier 解决了这些问题和所有限制,让您有机会不受任何限制使用你喜爱的软件。此外,它让你获得了额外的网络安全控制,创建代理隧道,并添加使用更多网络功能的权力。

特性如下:

  • 通过代理服务器运行任何网络应用程序。对于软件不需要有什么特殊配置;整个过程是完全透明的。
  • 通过代理服务器网关访问受限制的网络。
  • 绕过防火墙的限制。
  • ”隧道”整个系统 (强制所有网络连接,包括系统工作都通过代理服务器连接)。
  • 通过代理服务器解析 DNS 名称。
  • 灵活的代理规则,对于主机名和应用程序名称可使用通配符。
  • 通过隐藏您的 IP 地址的获得安全隐私。
  • 通过代理服务器链来工作,可使用不同的协议。
  • 查看当前网络活动的实时信息(连接,主机,时间,带宽使用等)。
  • 维护日志文件和流量转储。
  • 获得详细的网络错误报告。

Debian 生成新的交换分区

先看我在推特上的这条吐槽:

https://twitter.com/kelvinbloodzz/status/881719864989065217

嘛,事情是这样的。 我在阿里云的机器上编译 PHP,编译到中途就报了错误——内存不足。于是就纳闷了,这问题咋解决啊,难道要我换台机器?虚拟内存在哪呢?然后就是这样了:

才知道原来阿里云没有为我们默认创建交换分区。这个,算是个坑吧。

所以下面来看怎么添加交换分区。

给linux增加swap主要有两种方法,1是增加swap文件,2是增加swap分区。

在你有单独硬盘可以挂载的时候,才可以用第二种方式。具体根据你的环境操作来选吧。

增加 swap 文件

  • free查看系统内存及交换分区的使用率

      用法:free  -m   #以兆为单位查看
      free –m
    
  • 使用虚拟设备生成空文件

      dd  if=/dev/zero  of=目录/文件名  bs=容量  count=次数
      dd  if=/dev/zero of=/swapfile bs=100M count=10  #表示增加1G虚拟内存
    
  • 生成交换分区文件

      mkswap  /swapfile 
    
  • 激活交换分区

      swapon /swapfile
      swapon -s //检查是否生效
    
  • 交换分区永久生效

    在文件/etc/rc.local中添加一行

      swapon   /swapfile    #重启系统生效
    

如果要去掉这个新的交换分区,用如下命令:

/sbin/swapoff   /swapfile 

增加 swap 分区

增加 swap 分区

  • 设置分区

      mkswap  /dev/sdc
    
  • 激活分区

      swapon /dev/sdc
      swapon -s //检查是否生效
    
  • 交换分区永久生效

      echo /dev/sdc swap swap defaults 0 0  >> /etc/fstab //将/dev/sdc自动挂载成Swap写入fstab文件里
    

常见错误

  1. 在 openvz 的机器中,你可能会遇到这样一个错误:

     swapon: /swapfile: swapon failed: Operation not permitted
    

    对于这个问题我还没有好的解决办法,如果你有解决办法的话欢迎和我联系。

参考资料


PHP模块加载失败

当我们编译好 php 后,启动 php-fpm 时会出现这样一系列的模块加载失败的错误:

NOTICE: PHP message: PHP Warning:  Module 'bcmath' already loaded in Unknown on line 0
NOTICE: PHP message: PHP Warning:  Module 'curl' already loaded in Unknown on line 0
...

如图:

或者是查看 php 版本时,php -v 也会出现这样的错误。

PHP有两种方式添加扩展模块, 一种是直接编译进了PHP,另外一种是通过共享模式添加模块,并在php.ini配置文件中配置相应的模块。 在编译时的区别如下:

以下是直接编进内核的示例:

./configure --prefix /usr/share/php7  \
    --enable-mbstring \
    --with-bz2 \
    --with-curl \
    --with-xsl

以下是共享模式添加的示例:

./configure --prefix /usr/share/php7  \
    --enable-mbstring \
    --with-bz2=share \
    --with-curl=share \
    --with-xsl

以上问题出现的原因是我们需要的模块已经编译进PHP了,但是我们通过共享模块再次加载了这些模块,这样就导致重复加载。

解决方案:修改php.ini配置文件,注释掉相应的模块配置

;extension=pcre.so
;extension=spl.so
;extension=simplexml.so
;extension=session.so
;extension=exif.so

参考资料

参考资料