通过VNC远程访问ESXi虚拟机控制台

最近家庭服务器升级了ESXi6.5,发现使用 VMware Web Client 管理服务器还是蛮不错。
但是用来查看虚拟机的控制台,就不那么美了,每次都要点那么多下才能看到,费事儿的紧。偏执狂的我,自然把注意打到了VMware自带的VNC控制台身上。

首先要打开ESXi宿主机的SSH权限,登陆进去后执行1和2两个步骤,然后在需要管理的虚拟机上执行第3步。最后要怎么访问VNC就不用教程了吧?

1、列表项目

添加firewall配置文件

vi /etc/vmware/firewall/vnc.xml

<ConfigRoot>
  <service>
    <id>VNC</id>
    <rule id='0000'>
      <direction>inbound</direction>
      <protocol>tcp</protocol>
      <porttype>dst</porttype>
      <port>
        <begin>5911</begin>
        <end>5919</end>
      </port>
    </rule>
    <rule id='0001'>
      <direction>outbound</direction>
      <protocol>tcp</protocol>
      <porttype>dst</porttype>
      <port>
        <begin>0</begin>
        <end>65535</end>
      </port>
    </rule>
    <enabled>true</enabled>
    <required>false</required>
  </service>
</ConfigRoot>

2、刷新并验证防火墙规则

esxcli network firewall refresh
esxcli network firewall ruleset list | grep VNC

3、配置虚拟机高级参数

RemoteDisplay.vnc.enabled=TRUE
RemoteDisplay.vnc.password=anrip.com
RemoteDisplay.vnc.port=5911

备注,我是允许了5911-5919这9个端口,客官你可随意,但是一定要和虚拟机配置对应的啦~

制作MacOS安装ISO/光盘映像文件

昨天,想要在家庭服务器上黑苹果,先是破解ESXi,添加了MaxOS描述文件。
现在需要准备MacOS安装ISO,忽然发现家里的30Mb光纤下载7GB的文件还是需要很久滴。
忽然想起,上次更新 MacBook Pro 好像没有删除安装文件,那么,直接在本地转换安装文件为ISO映像吧,只要区区几分钟就搞定。

#!/bin/bash
#

# Create the Blank ISO Image of 6GB with a Single Partition - Apple Partition Map
hdiutil create -o /tmp/Mojave -size 6g -layout SPUD -fs HFS+J -type SPARSE

# Mount the Blank Sparse Image
hdiutil attach /tmp/Mojave.sparseimage -noverify -nobrowse -mountpoint /Volumes/install_build

# Create the installer image
sudo ./Install\ macOS\ Mojave.app/Contents/Resources/createinstallmedia --volume /Volumes/install_build --nointeraction

# Give the installer image an icon
cp "./Install macOS Mojave.app/Contents/Resources/InstallAssistant.icns" "/Volumes/Install macOS Mojave/.VolumeIcon.icns"
SetFile -a C "/Volumes/Install macOS Mojave/"

# Unmount the Install Image
hdiutil detach /Volumes/Install\ macOS\ Mojave

# Resize the SparseImage to its minimum
#hdiutil compact /tmp/Mojave.sparseimage
#hdiutil resize -size min /tmp/Mojave.sparseimage

# Convert the Sparse Image to ISO/CD
hdiutil convert /tmp/Mojave.sparseimage -format UDTO -o /tmp/Mojave

# Rename the ISO Image and move it to the desktop
mv /tmp/Mojave.cdr ~/Desktop/Mojave.iso
rm /tmp/Mojave.sparseimage

MacOS安装Cocoapods的填坑之旅

今天接到一个任务,部署一套iOS-App开发环境,需要用到CocoaPods。

这还不是手到擒来?首先从AppStore安装Xcode,然后运行命令安装CocoaPods即可。

可是意外来的太快,按照官方的命令根本无法安装,各种报错,其中郁闷不足为外人道~~

整理最终命令如下:

# 设置中国源
gem sources --remove https://rubygems.org/
gem sources --add https://gems.ruby-china.org/
# 更新gem系统
sudo gem update --system
# 指定安装环境
sudo gem install -n /usr/local/bin cocoapods

解决iOS拍照上传图片旋转问题

html5应用,可以直接使用file功能调用相机拍照并上传,但是在iOS上有个奇葩的问题,图片不会自动翻转,上传到服务器上的图片可能是倒立的。

解决此问题有2种思路:

1.使用客户端JS检测图片信息,旋转后再上传。此方法实现需消耗客户端资源。

懒得整理js代码了,暂时按下不表。

2.使用服务端PHP检测图片信息,旋转后保存。此方法需要消耗少量的服务器资源。

function correct_image_orientation($target) {
    if(!function_exists('exif_read_data')) {
        return false;
    }
    $exif = exif_read_data($target);
    if($exif && isset($exif['Orientation']) && $exif['Orientation'] != 1) {
        switch ($exif['Orientation']) {
            case 3: $deg = 180; break;
            case 6: $deg = 270; break;
            case 8: $deg = 90; break;
            default: $deg = 0;
        }
        if($deg > 0) {
            $img = imagecreatefromjpeg($target);
            $img = imagerotate($img, $deg, 0);
            imagejpeg($img, $target, 95);
        }
    }
}

使用nginx-image-filter缩放或裁切图片

在编译Nginx时,记得增加http_image_filter模块,然后在server区域加入如下代码即可。
如果你懒得编译这个模块,也可以下载我编译好的Webox直接安装。

#生成缩略图(等比例)
#http://www.anrip.com/expamle/test.jpg?r128x128
if ($args ~ ^r\d+x\d+$) {
    rewrite ^(.+)$ $1/$args? last;
}
location ~* \.(gif|png|jpg|jpeg)/r(\d+)x(\d+)$ {
    rewrite ^(.+)/r(\d+)x(\d+)$ $1 break;
    image_filter resize  $2 $3;
    image_filter_buffer  10M;
}
#生成裁切图片(固定高宽)
#http://www.anrip.com/expamle/test.jpg?c128x128
if ($args ~ ^c\d+x\d+$) {
    rewrite ^(.+)$ $1/$args? last;
}
location ~* \.(gif|png|jpg|jpeg)/c(\d+)x(\d+)$ {
    rewrite ^(.+)/c(\d+)x(\d+)$ $1 break;
    image_filter crop  $2 $3;
    image_filter_buffer  10M;
}

Ubuntu安装新版NodeJS

Ubuntu发行版中NodeJs版本低的吓人,几乎没法正常使用。当然我们也有很多种方法可以安装NodeJS,但多多少少都有些麻烦,对于我这种懒人来讲,最好能几行命令完事儿。

nver=v10.15.3

# download the binary
wget https://nodejs.org/dist/${nver}/node-${nver}-linux-x64.tar.gz
tar xvf node-${nver}-linux-x64.tar.gz

# install to /usr/local
rm node-${nver}-linux-x64/{*.md,LICENSE}
cp -av node-${nver}-linux-x64/* /usr/local
rm -rf node-${nver}-linux-*

使用Munin监控多台服务器状态

一、安装服务端和监控节点

1、安装服务端 aptitude install munin

2、安装监控节点 aptitude install munin-node 可以在多台不同服务器上安装

二、配置服务端

1、编辑配置文件/etc/munin/munin.conf,注释掉默认节点[localhost.*]

2、添加节点配置/etc/munin/munin-conf.d/nodes

[srv005]
    address 12.35.67.5
    use_node_name yes
[srv006]
    address 12.35.67.6
    use_node_name yes
[srv007]
    address 12.35.67.7
    use_node_name yes

三、配置节点

编辑配置文件/etc/munin/munin-node.conf

allow ^12\.35\.67\.9$

使用SFTP完全替代FTP设置详解

由于FTP协议使用明文传输密码,我们通常建议用户改为使用SFTP,且设置Chroot目录,禁止登录Shell,以提高服务器安全性。
当然,很多优秀的FTP服务器都已经支持加密,但如果服务器上已有SSH服务,我们完全可以使用SFTP来传输数据,何必要多开一个进程和端口呢?

1,修改配置文件 /etc/ssh/sshd_config

#启用internal-sftp
Subsystem sftp internal-sftp
#限制用户的根目录
Match User ftp-user
ForceCommand internal-sftp
ChrootDirectory /var/ftproot

2,重启ssh服务即可

特别注意
ChrootDirectory 设置的目录权限及其所有的上级文件夹权限,属主和属组必须是root,权限最大设置只能是755。

OpenWRT之数据包原路发回(多出口策略路由)

PS:请自行安装软件包 ip-full

eth0: 内网接口0
eth1: 外网线路1
eth2: 外网线路2

# 创建路由表
echo "51 way1" >> /etc/iproute2/rt_tables
echo "52 way2" >> /etc/iproute2/rt_tables
# 设置线路二
ip route flush table way1
ip route add 172.16.1.0/24 dev eth0 scope link table way1
ip route add 11.11.11.0/24 dev eth1 scope link table way1
ip route add 22.22.22.0/24 dev eth2 scope link table way1
ip route add default via 11.11.11.1 dev eth1 table way1
ip rule add from 11.11.11.11 pref 101 table way1
# 设置线路一
ip route flush table way2
ip route add 172.16.1.0/24 dev eth0 scope link table way2
ip route add 11.11.11.0/24 dev eth1 scope link table way2
ip route add 22.22.22.0/24 dev eth2 scope link table way2
ip route add default via 22.22.22.1 dev eth2 table way2
ip rule add from 22.22.22.22 pref 102 table way2
# 刷新路由缓存
ip route flush cache

至此无论是way1还是way2,访问2个ip的任意一个地址都能够连通了。
即便是服务器上本身的默认路由都没有设置,也能够让外面的用户正常访问。

以下为相关参考指令:

# 指定IP出口
ip rule add from 172.16.1.5 pref 201 table way1
ip rule add from 172.16.1.6 pref 202 table way2
# 删除IP规则
ip rule del table pref 201 way1
ip rule del table pref 202 way2