ESXi 通过命令行升级

从官方网站下载升级用的zip包,上传到ESXi主机存储任意目录,登陆SSH控制台,执行更新命令

esxcli software vib install -d=/full/path/VMware-ESXi-6.7.0-8169922-depot.zip

执行成功后提示如下

Installation Result
Message: The update completed successfully, but the system needs to be rebooted for the changes to be effective.
Reboot Required: true
VIBs Installed: VMW_bootbank_ata-libata-92_3.00.9.2-16vmw.670.0.0.8169922, …, VMware_locker_tools-light_6.5.0-0.0.4564106
VIBs Skipped:

手动删除Matomo/Piwik历史日志(MySQL删除大量数据)

不知不觉间,Piwik数据的容量已经达到500GB,虽然并没有感觉到性能有什么影响,但也是时候考虑如何清理其最占空间的访问记录数据了。于是决定拿备份库演练一番:

首先想到的是使用后台的自动清理功能,但是发现其每次10000条的删除能力,对于此等量级的数据可谓是杯水车薪。最后只能翻看源码,得出最基本的两条删除语句。

DELETE FROM `wk_log_conversion` WHERE server_time < '2021-01-01 00:00:00';
DELETE FROM `wk_log_visit` WHERE visit_last_action_time < '2021-01-01 00:00:00';
DELETE FROM `wk_log_link_visit_action` WHERE server_time < '2021-01-01 00:00:00';

至于 wk_log_action 这个表里是被引用的内容,下次遇到相同的引用内容,仍然需要添加一条记录。不删除反而可以确保idaction的唯一性。

至此,我们将遇到第二个问题:

如果要从InnoDB大表中删除许多行,则可能会超出表的锁定表大小InnoDB。也许删除500G的数据需要8个小时左右。

为了避免这个问题,或者只是为了最小化表保持锁定的时间,官方给出以下策略(根本不使用 DELETE):

  • 选择不要删除的行到与原始表具有相同结构的空表中

    INSERT INTO t_copy SELECT * FROM t WHERE ... ;
  • 使用RENAME TABLE以原子移动原始表的方式进行,并重新命名拷贝到原来的名称

    RENAME TABLE t TO t_old, t_copy TO t;
  • 删除原始表

    DROP TABLE t_old;

最终,我们优化查询如下

CREATE TABLE wk_log_conversion_copy LIKE wk_log_conversion;
INSERT INTO wk_log_conversion_copy SELECT * FROM wk_log_conversion WHERE server_time >= '2021-01-01 00:00:00';
RENAME TABLE wk_log_conversion TO wk_log_conversion_old, wk_log_conversion_copy TO wk_log_conversion;

CREATE TABLE wk_log_visit_copy LIKE wk_log_visit;
INSERT INTO wk_log_visit_copy SELECT * FROM wk_log_visit WHERE visit_last_action_time >= '2021-01-01 00:00:00';
RENAME TABLE wk_log_visit TO wk_log_visit_old, wk_log_visit_copy TO wk_log_visit;

CREATE TABLE wk_log_link_visit_action_copy LIKE wk_log_link_visit_action;
INSERT INTO wk_log_link_visit_action_copy SELECT * FROM wk_log_link_visit_action WHERE server_time >= '2021-01-01 00:00:00';
RENAME TABLE wk_log_link_visit_action TO wk_log_link_visit_action_old, wk_log_link_visit_action_copy TO wk_log_link_visit_action;

DROP TABLE wk_log_conversion_old, wk_log_visit_old, wk_log_link_visit_action_old;

官方文档链接 https://matomo.org/faq/how-to/faq_20184/

CentOS7之LVM磁盘扩容

创建文件系统,并设置t为8e

fdisk /dev/sdb

扩容LVM卷

pvcreate /dev/sdb1
vgextend centos /dev/sdb1
lvextend -l +100%FREE /dev/centos/root

若根目录/文件系统为ext4

resize2fs /dev/centos/root

若根目录/文件系统为xfs

xfs_growfs /dev/centos/root

查看磁盘状态

df -h

Ubuntu下刷极路由不死uboot

今天帮朋友刷2个极路由的uboot,但他那边只有一台Ubuntu-Server可远程登陆。
悲剧的我,只好SSH连接他本地的Ubuntu,然后再连接极路由刷写固件:

极路由1s

wget https://breed.hackpascal.net/breed-mt7620-hiwifi-hc5761.bin

scp -P 1022 root@192.168.199.1:/tmp/
ssh -p 1022 root@192.168.199.1

输入密码,登陆系统后,执行刷写命令

mtd write /tmp/breed-mt7620-hiwifi-mt7620.bin u-boot

极路由3

wget https://breed.hackpascal.net/breed-mt7620-hiwifi-hc5861.bin

scp -P 1022 root@192.168.199.1:/tmp/
ssh -p 1022 root@192.168.199.1

输入密码,登陆系统后,执行刷写命令

mtd write /tmp/breed-mt7620-hiwifi-hc5861.bin u-boot

清理macOS蛋疼的可清除空间

自从macOS有了这个不着调的提示,一直让我这个强迫症患者无比揪心,于是各方寻访与尝试,总结如下2个方法可用于手动清理这部分空间。

1.清空 ~/library/caches 文件夹里面的内容(小白可以用这个方法试试)

2.命令行里跑一下 sudo diskutil secureErase freespace 0 /dev/disk1s1 (请自行替代分区数字,新手请绕道)

自动生成百度云加速IP白名单

百度云加速的ip段非常之多,官方给了一个帖子来列出这些ip,获取起来十分不便。
倍感痛苦的我,最终还是决定写个PHP脚本自动更新Nginx的real_ip规则。其他规则也可以参考修改。

最新源码参看:https://github.com/anrip/baidu-yunjiasu-ip

<?php
$bdip = read_ip_list('https://ticket-baidu.kf5.com/posts/view/148628');
$cfip = read_ip_list('https://www.cloudflare.com/ips-v4');
$list = array_merge($bdip, $cfip);

make_nginx_real_ip_conf($list);

///////////////////////////////////////////////////////////

function make_nginx_real_ip_conf($list) {
    foreach($list as &$ip) {
        $ip = "set_real_ip_from {$ip};";
    }
    $text = implode("\n", $list);
    file_put_contents('nginx_real_ip.conf', $text);
}

function read_ip_list($site) {
    $html = file_get_contents($site);
    if(!preg_match_all('/\d+\.\d+\.\d+\.\d+\/\d+/', $html, $list)) {
        exit("读取远程数据失败: {$site}\n");
    }
    return sort_ip_list($list[0]);
}

function sort_ip_list($list) {
    $rets = array();
    foreach(array_unique($list) as $val) {
        $ip = ip2long(explode('/', $val)[0]);
        $ip = sprintf('%u', floatval($ip));
        $rets[$ip] = $val;
    }
    ksort($rets);
    return array_values($rets);
}

通过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