域名的价格-从 Godaddy 迁移到阿里云

FreeLAMP.com 是创始人徐永久自 2001 年开始就注册的域名,一直放在 GoDaddy 上,在创业之前,因为是注册了5年的域名,所以就一直放在 GoDaddy,这次终于要到期重新续费了。 GoDaddy 的价格是 3年 345 元,而阿里上的续费一个 .com 域名的价格是三年 207元,产品的竞争力可想而知。

域名和备案没有必然的关系,只有服务器主机在国内的运营商的,才需要备案。国内的备案不支持 .org 域名。其他 .org.cn, .com.cn, .net.cn 之类的基本都是假域名,可以忽略。中国的创新,从 .com.cn 迁移到 .cn 是非常快而高效的,你去看澳洲或者新西兰的 .com.au, 或者 .co.nz 其实一直在那里沿用,直接用 mydomain.au 或者 mydomain.nz 的域名很少,这些国家其实都是懒,不作为。

吐槽一下 GoDaddy 的域名管理界面,需要翻墙才能访问不说,界面十分的不好用,而且 API 的使用也十分的 Low。价格问题不是主因,是不接地气才是这些外企失败的原因。

如果是去拍卖一个域名,同样的域名,阿里上是 39.8k,而 GoDaddy 上要 41k

怎样在亚马逊 AWS 上申请12个月免费的 EC2

首先需要准备的物资:
1. 一张 Visa 或者 Master 的信用卡
2. 一个电子邮件(这是你 AWS 上的身份,每年可以换不同的邮件申请免费 EC2 )
3. 一个能接收验证码的手机(废话)

账号申请时,会问 Professional 还是 Personal,就选择 Personal 好了。然后填写个人地址,手机号码,然后填写信用卡号码,预扣1美元校验信用卡有效性。然后,信用卡银行会往你在银行登记的手机号码自动语音电话,让你确认境外交易。账号就算创建好了, 也会收到邮件提示。但是屏幕提示是需要24小时以内才会生效。也就是说,没有正式生效之前,是不可以开实例的。大概等了1-2个小时以后,就可以去开实例了。

开实例之前, 要首先选择 Region ,这个非常重要,一般选亚洲的,切换不同的区域, URL 的网址也会不一样,你 ping URL 里的域名,选择延迟比较小的就可以了。 我们就选择东京(Tokyo) 的区域,香港的区域是需要另外 Enable 的,懒得去 Enable 以免生成另外的费用。

之后就选择操作系统类型,我们选 Ubuntu 1804 普通版本,选 Free Tier 的 1G 内存, 1vCPU,8GB SSD*,然后把公网IP 地址和KeyPair 保存下来,等会儿要用到。接下来点击其中的 Security Group,为 Inbound Rule 添加tcp/udp 端口,默认只有 22 端口,根据自己的实际情况,开通对应的 tcp/udp 端口。

这样子一个基本的免费 EC2 申请就算完成了。

高级一点的,我们可以通过 aws-cli ,也就是在命令行下对实例进行操作。在右上角个人昵称的地方下拉,选择 My Security Credentials,然后创建 Access Key。把 Key 保存下来,在 aws-cli 就可以使用的。

要登录 Linux EC2 主机,我们需要 Windows 上安装 ssh 客户端,或者通过 Linux 主机登录,我们在 Windows 上安装了 Cygwin ,可以直接通过其中的 ssh 命令登录 EC2. $ ssh -i tokyo.pem ubuntu@52.195.x.x ,这样子就登录了, 然后 sudo -s 就可以成为超级用户,为所欲为了。

针对高级用户,接下来,我们把前面下载到的一个 Access Key 的 csv 文件记录下来。然后用以下命令配置好 profile,注意后面的 profile name “free_ec2” 可以随便取。

$ aws configure --profile=free_ec2

根据 CSV 里的 keyID 和 keySecret 粘贴,输入区域名:ap-northeast-1,就可以在 $HOME/.aws 下看到生成或者添加的 config 和 credentials 两个文件了。 我们写了一个简单的脚本,可以监控实例是否正常运行,如果有不正常的情况会报错。

#!/bin/bash
profiles=$(sed -n -e 's/\[\(.*\)\]/\1/p' credentials)
[ -z "$profiles" ] && exit 0
for P in $profiles; do
STATUS=$(aws ec2 describe-instance-status --profile $P|jq ".InstanceStatuses"|jq ".[]"|jq -r ".InstanceState.Name,.SystemStatus.Status"|paste -d ' ' - -)
[ "${STATUS}" != "running ok" ] && echo "Error: Something Wrong with AWS Instance! [$STATUS]"
done
$ vim /etc/hostanme
$ sudo apt upgrade
$ sudo reboot
$ sudo apt install kcptun shadowsocks-libev*
$ sudo snap install v2ray (this won't work due to apparmor issue)

香橙派 Pi Zero 上的容器操作系统 BalenaOS

香橙派是深圳迅龙公司的产品。该公司旗下有不同种类的基于 AllWinner 芯片的不同的 Pi. Pi Zero 只是其中一个比较低端的产品,H2(ARM Cortex-A7 Quad-core) 的CPU,512M 内存,1x 100M 网口, Wi-Fi 模块, OTG 电源 + 1x USB 2.0 ,最大 32GB TF 卡。当然操作系统要灌在 TF 卡上。

去 balenaCloud 注册一个账号以后,添加设备,选择香橙派 Pi Zero,下载 img,烧写到 TF 卡上,插入到香橙派,上电,插网线,它会自动 DHCP 从网络里取到 IP 地址,然后,过了很长很长时间(1天,2天?)后,在 balena 的云端可以看到“Online”,之前一直 Inactive,不理解是网络那里有问题。

Balena 在他们家网站介绍就是一堆构建,部署,管理 Linux 设备的工具集。下面的这个图基本上能概括他们家的产品列表。这是一家初创公司,看上去充满了很多创新的元素。

部署的前面10个设备是免费的,20个以内每个月 99 美元!50个设备,每个月 299 美元,100 个设备的话要 1299 美元,企业级支持是每月 2999 美元!

先看下,我们已经上线的香橙派吧:

让我们通过命令行进入香橙派看看里面到底是什么东西。我们用 balena scan 看下局域网内的设备:

我们用 balena ssh IP地址,就可以进入香橙派了。 使用 lsof -Pi 命令,我们就可以查看设备侦听的所有网络口:

看下板子的信息:

KVM Bridge nmcli 修改网卡等等

之前刚研究 KVM 时,记录的一些笔记

删除不要的 Bridge: br1

# ifconfig br1 down
# brctl delbr br1
# brctl show
$ virt-sysprep --list-operations
$ virt-clone -o centos-02 -n centos-03 -f /opt/kvm_disk/centos-03.qcow2
 
# cloud-init clean
# systemctl restart cloud-init-local.service
# netplan apply

# virsh qemu-agent-command <guest-name> '{"execute":"guest-info"}'

linuxtechi@kvm-ubuntu18-04:~$ sudo apt install cpu-checker
linuxtechi@kvm-ubuntu18-04:~$ sudo kvm-ok

virsh net-update add-last ip-dhcp-host \
   --file "<host mac='00:11:22:33:44:55' ip='192.168.122.45'/>" \
   --live --config

$ virsh dumpxml centos-03|grep 'mac address'
# yum provides avahi-resolve --disablerepo=epel

error: Unsafe migration: Migration may lead to data corruption if disks use cache != none or cache != directsync

# nmcli con show
# nmcli con delete uuid
# nmcli con add type ethernet ifname eth0 con-name eth0 \
  autoconnect yes ip4 192.168.1.10 gw4 192.168.1.1
# nmcli con mod eth0 ipv4.method manual 
# nmcli con mod eth0 ipv4.dns "8.8.8.8 8.8.4.4"
# nmcli con down eth0 && nmcli con up eth0

Add IPv6 address for AWS EC2 Instance

Refer: https://blog.csdn.net/SinnetCloud/article/details/102740328
Original in Chinese, but it is useful for English speaking people to use, just try to translate with my own words and steps. Simple so far.

Step 1: Add IPv6 for VPN: on your Instnace page, click the VPC name, on the Action pull-down, select Edit CIDRs, just add IPv6.

Step 2: Add IPv6 CIDR for subnet: On the instance page again, click the subnet ID, there on Actions menu, Edit IPv6 CIDRs, input the required two digits as “00” for the first subnet, click Save.

Step 3: Add all the related IPv6 security group inbound rule, just copy all IPv4, but change the source as ::/0

Step 4: Assign IPv6 address to Instance: In the “Manage IP Addresses” window, just click assign on the IPv6, it will auto-assign the existing IPv6 address.

Step 5: Add IPv6 route table to the Internet Gateway, On the VPC page, click “Route Tables” menu, in the Actions, select Edit Routes, just add a new routes which destination is “::/0” and Target as “Internet Gateway” and then select the right Internet gateway.


Step 6: Use ping6 to verify new IPv6 address is pingable, and last step to goto your DNS provider add AAAA record for your domains.

Proxmox VE 3分钟快速上手

Proxmox VE 是一款开源的虚拟化管理软件。内核基于 Debian,如果需要测试的话,其实也是蛮快可以上手的。 当然 前提是有 KVM 基础。

当然先是去官网下载最新版本的 iso,用 Bitrorrent 种子的下载速度可以达到 8Mb 每秒, 700 多兆的 iso,11分钟就下载完成。把 iso 拷贝到 Linux 机器上,插入 U盘,fdisk -l 查看,假设盘符为 /dev/sdb,然后 dd if=xxxx.iso of=/sdb bs=1M 就可以把 iso 烧录到 U 盘上了。
在要安装的物理服务器上,打开 UEFI 引导,然后就可以看到 Proxmos 的安装界面了,配置好服务器的网络和 root 口令后,安装十分快捷,重启会提示通过 https://ip:8006/ 就可以进入管理界面。

安装就大功告成了!接下来,添加存储和虚拟机。在 Web 界面用 root 用户登录后,设置语言为中文,进入存储界面,添加我们之前已经设置好的 NFS Share,设置好不同的类别,例如 iso 还是 vm 。记住,原先的存在的目录要按照 Proxmox 的约定重新移动到新的目录 iso 为挂接点下的 template/iso , vm 为 挂节点下的 images/<VMID>/ ,只有这样才能看到 Proxmox 之前的那些 iso 或者 qcow2 文件。

接下来,我们就可以开始创建虚拟机了,点击右上角的“创建虚拟机”,设置好虚拟机名称,从 isopool 里下拉,可以看到之前的 iso 文件,选择对应的映像,然后一步一步点选,就设置完成了。然后启动虚拟机,如果看到 No VNC,那是因为浏览器所在的 PC 客户端没有安装过 VNC ,不要紧,如果安装过 virt-view,我们在显卡设置里去修改成 Spice 就可以。然后会自动下载一个 .vv 文件,会自动用 virt-viewer 打开,我们就可以连接到虚拟机的 console 开始通过 iso 安装操作系统了。

那怎么样把已经有的之前用其他工具/方法创建的 qcow2 启动镜像放到 PVE 里面呢?

参考网络上的文档的做法是先创建一个虚拟机,生成和原先文件一样大的 qcow2 文件,然后把这个文件覆盖。虚拟机是可以启动的。这样子,我们就可以把先前所有的虚拟机都迁移到 PVE 上了。

V2V 的迁移非常简单,我们首先在 PVE Host 的命令行下创建一个 ID 为 102 的虚拟机:
# qm create 102 –bootdisk scsi0
然后进入到 Host 上的 NFS 挂接的目录,当然也可以不进入,后面多敲一点路径而已。
# cd /mnt/pve/vmpool
把里面的 elk-02.qcow2 转换到 102 虚拟机上。
# qm importdisk 102 elk-02.qcow2 vmpool –format qcow2

假定我们的 storage 名字叫 vmpool,我们可以用 pvesm list vmpool 看到下面的所有虚拟机映像以及快照,然后我们重新设置一下虚拟机 102 的启动盘:
qm set 102 –scsi0 vmpool:102/vm-102-disk-0.qcow2

这样子,通过以上三步,先建立虚拟机,再导入磁盘,再设置启动盘,就把之前的虚拟机就可以全部导入到 PVE 了!

完美!

后记:


系统安装后,默认是 subscribe 的,会导致更新失败。 我们需要修改 apt source 文件:/etc/apt/sources.list.d/pve-enterprise.list
# deb https://enterprise.proxmox.com/debian/pve buster pve-enterprise
deb http://download.proxmox.com/debian/pve stretch pve-no-subscription

如果有安装过 proxychains , 然后设置过绕墙代理的话,用 proxychains apt -y update 就可以很快把系统更新了。

对了, 所有的原先 virsh 的一些命令,大多数都可以通过 qm 命令来完成。

pvesm 是管理存储的, pvecm 是管理集群的。

KVM 克隆 Ubuntu 虚拟机一个总算有解的 grub PV/VG UUID 问题

这件事情折腾有一段时间了。 virt-clone 然后 virt-sysprep 好的 Ubuntu 虚拟机因为 /boot/grub/grub.cfg 里面的 VG UUID 没有被修改, 导致虚拟机不能启动,必须手工操作。 笨办法是挂接 Rescue CD, 取到当前的 UUID,更新 grub.cfg 文件,稍微好一点的办法是用 NBD 方式直接挂接虚拟机映像,用同样的办法。

实际上 KVM 有自己的 virt-rescue 命令, 直接可以通过 libguestfs API 来和虚拟机映像通信的。 所以,新的办法是:
# sudo virt-rescue -d guest-domain 或者 -a guest-disk.qcow2
<rescue> mkdir /mnt
<rescue> vgchange -ay
<rescue> mount /dev/rootvg/root /mnt
<rescue> for i in /dev /dev/pts /proc /sys /run; do mount -B $i /mnt$i; done
<rescue> chroot /mnt
<rescue> grub-install /dev/sda
<rescue> update-grub
以上是更新 grub 的办法, 实际上我们后面要讲到 virt-sysprep 我们会绕过 pv/vg UUID 的初始化,但是为了实现完整的初始化过程,我们需要在 virt-sysprep 后,生成新的 PV/VG 的 UUID,步骤是:
<rescue> vgchange -an rootvg
<rescue> pvchange -u /dev/sda1
<rescue> pvdisplay
我们可以看到 UUID 已经更改了。

同样的,对 vg 做修改:
<rescue> vgchange -u rootvg

所以, 以上其实做了一个倒叙,理论上应该是先修改 UUID,再更新 grub。

下面我们介绍 virt-sysprep 的一些命令行参数。

虚拟机的克隆其实是非常简单的一个事情,下面是 shell 里的一个克隆函数:
-o 就是老的 domain , -n 就是新的 domain, -f 就是新的虚拟机磁盘映像文件

做完克隆以后,我们做 virt-sysprep,函数是这样写的:

检测虚拟机操作系统类别用了 virt-inspector 后面加 –no-applications 不输出安装的软件包,我们用了 xmllint 来取出输出的 xml 里操作系统类别的那个 distro 值,用 sed 去掉 xml tag. 如果 distro 这个值是 ubuntu 的话,我们就执行特别的一些操作,看 operations 里的列表,前面有减号的就是不要操作的,其中 –lvm-uuids 就是不重新生成 pv/vg 的 UUID。
如果按照以上 virt-sysprep 参数,直接克隆完成后,这个虚拟机就是直接可以启动的,不存在 grub 问题,但是显然可能会遇到虚拟机 PV/VG UUID 和其他冲突的问题,这就要回到最初需要手工 virt-rescue 初始化 UUID了。

总结: 对事物的认识总是一个进化的过程,重复造轮子是一件可耻的事情。有这么一个 virt-rescue,还有 virt-inspector ,其实还有另外一个 virt-filesystems 可以使用,如果自己还要用 nbd 挂接来做虚拟机的操作,就有点 LOW 了。

However,这件事情的全自动化,依然没有做到。因为 。。。
==============================================
当写到上面的因为时,突然想到是自己的 sysprep 部分函数原来的 –run-command 缺少了 grub-install 造成的,但是每次 sysprep 都是 lvm-uuid 最后才走,所以,我们需要走两次 sysprep,第一次只走 lvm-uuids 的初始化,第二次走其他的 operations ,然后运行 grub-install 和 update-grub ,这样子,一个全自动的流程就搞定了。 上完整的脚本:

部分脚本代码:(非完整代码)

echo “正在检查原始虚拟机的操作系统”
OS=$(sudo virt-inspector -a ${OLD_DISK} –no-applications |xmllint –xpath /operatingsystems/operatingsystem/distro -|sed -e ‘s/<[^>]*>//g’)
if [ “$OS” = “ubuntu” ]; then
echo “Ubuntu 系统先初始化 LVM UUID …”
sudo virt-sysprep –operations lvm-uuids -a ${DISK}
echo “重新运行初始化其余部分,设置主机名为: ${HOST} “
sudo virt-sysprep -a ${DISK} \
–hostname ${HOST} \
–ssh-inject ${user}:file:$key \
–operations ssh-hostkeys,defaults,-lvm-uuids,-puppet-data-log,-samba-db-log,-rhn-systemid,-rh-subscription-manager,-yum-uuid \
–run-command ‘/usr/sbin/grub-install /dev/sda’ \
–run-command ‘/usr/sbin/update-grub’

老了,GlusterFS 初探

随便搜索一下 GlusterFS 的文章,发现 CSDN 上人家2012年就在研究 KVM 的高可用方案了,而我自己当时还在做 Solaris Zone ,互联网实在是屌丝的天下。 去 IOE是大势所趋,有更好更便宜的虚拟化,私有云解决方案,为什么要用 Vmware 啊?