Feb 20, 2020
TechnologyRecently I find it’s necessary to re-orgnize my blog structure, for past 8
years I’ve written nearly 1000 articles in this blog, they covered so many
technologies, from embedded system to cloud-computing, also with my life’s
blog. So I simply use Technology
and Life
for classifying them. Also I
have to adjust my websiste’s compatibility to newest hugo(v0.64.0), previously
I use an old version(v0.31.0) for building the whole website. Following
are the steps for doing such a complicated task.
1. Structure Re-Orgnization
Replace all of the md
files and markdown
files’s categories
:
$ cd /home/xxxxx/Code/purplepalmxxxx.github.io/src/content/post
$ find . | xargs -I % sed -i 's/categories\ =.*/categories\ =\ ["Technology"]/g' %
$ find . | xargs -I % sed -i 's/categories:.*/categories:\ ["Technology"]/g' %
Some of the old markdown files didn’t have categories, manually add them:
$ sed -i '2s/$/categories:\ ["Technology"]/' 2013-07-*
$ sed -i '2s/$/categories:\ ["Technology"]/' 2013-08-*
$ sed -i '2s/$/categories:\ ["Technology"]/' 2013-09-*
$ sed -i '2s/$/categories:\ ["Technology"]/' 2013-10-*
$ sed -i '2s/$/categories:\ ["Technology"]/' 2013-11-0*
$ sed -i '2s/$/categories:\ ["Technology"]/' 2013-11-11*
$ sed -i '2s/$/categories:\ ["Technology"]/' 2013-11-12*
By-now all of the posts are Technology
related, manually change some posts
to LinuxTips
and Life
.
2. Upgrade hugo
Download the newest hugo version from official site and put it in binary
directory:
$ cd binaries
$ ls
hugo hugo_v031
$ ./hugo version
Hugo Static Site Generator v0.64.1/extended linux/amd64 BuildDate: unknown
Adjust some for generate properly(hyde-a theme adjustment):
$ rm -f
/home/xxxx/Code/purplepalmxxxx.github.io/src/themes/hyde-a/layouts/post/post.html
$ vim
/home/xxxx/Code/purplepalmxxxx.github.io/src/themes/hyde-a/layouts/index.html
{{ partial "head.html" . }}
<div class="content container">
<div class="posts">
+++ {{ $paginator := .Paginate (where .Site.RegularPages "Type" "in" site.Params.mainSections) }}
{{ range $paginator.Pages }}
Now commit all of the changes, the ci/cd for blogging will automatically use
the newest version of hugo for building-out the static website.
Feb 14, 2020
Technology0. AIM
For deploying Ovirt HyperConverged in air-gapped environment.
For some companies, their inner environment is air-gapped, e.g OA network. In
such air-gapped environment we could only use ISO and take some packages in
cd-roms for taking into their intra-network. How to deploy a ovirt drivened
private cloud in air-gapped room, I will take some experiment and try the
solution out.
1. Environment
In this chapter the environment will be available for ovirt deployment with glusterfs.
1.1 Hardware
I use my home machine for building the environment, the hardware is listed as:
CPU: Intel(R) Core(TM) i5-4460 CPU @ 3.20GHz
Memory: DDR3 1600 32G
Disk: 1T HDD.
1.2 OS/Networking/Software
My home machine runs ArchLinux, with nested virtualization.
Use qemu and virt-manager for setting the environment.
# qemu-system-x86_64 --version
QEMU emulator version 4.2.0
Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project developers
# virt-manager --version
2.2.1
I setup a isolated networking in virt-manager, cidr is 10.20.30.0/24, 3 vms
will use this isolated networking for emulating the air-gapped environment, its name is ovirt-isolated
:
1.3 VMs Preparation
I use 3 vms for setting up the environment, each of them have:
2 vcpus
10240 MB memory
vda: 100 GB, for installing the system.
vdb: 300 GB, for setting up the storage network.
NIC: 1x, attached to ovirt-isolated networking.
hostname - IP is listed as following:
instance1.com 10.20.30.31
instance2.com 10.20.30.32
instance3.com 10.20.30.33
engineinstance.com 10.20.30.34
For setting up the ip address, use nmtui
in terminal, take instance1.com for example:
For setting up the hostname, also use nmtui
:
Login to each machine and enable the password-less login, take instance1 for example:
# ssh-keygen
# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.20.30.31 instance1.com
10.20.30.32 instance2.com
10.20.30.33 instance3.com
10.20.30.34 engineinstance.com
# ssh-copy-id root@instance1.com
# ssh-copy-id root@instance2.com
# ssh-copy-id root@instance3.com
Also add following items(engine vm’s hostname and ip address) into host machine(archLinux)‘s /etc/hosts
:
10.20.30.31 instance1.com
10.20.30.32 instance2.com
10.20.30.33 instance3.com
10.20.30.34 engineinstance.com
2. Deploy Glusterfs
Use firefox for visiting https://10.20.30.31:9090
:
use root for login, enter the instance1.com
's cockpit web:
Click V
->Hosted Engine
, then click the start
button under Hyperconverged
:
Click Run Gluster Wizard
:
Fill in 3 nodes’s hostname, click next
:
In Additional Hosts
, click Use same hostnames as in previous step
, thus Host2 and Hosts3 will be added automatically:
In Packages
we keep the default empty items and click next for continue.
Keep the default volumn setting, and enable the Arbiter for data
and vmstore
:
Here we adjust the LV device name to vdb
, and adjust the size as 80,80,80
, click next for continue:
The volume size for running engine vm should be at least 58GB(ovirt default minimum size, actually takes more than this number. )
Review and click deploy:
The ansible tasks will run until you see this hint:
Click Continue to hosted engine deployment
to continue.
3. Hosted Engine
Before continue, manually install the rpms in instance1.com
:
# yum install -y ./ovirt-engine-appliance-4.3-20200127.1.el7.x86_64.rpm
# rpm -qa | grep ovirt-engine-appliance
ovirt-engine-appliance-4.3-20200127.1.el7.x86_64
Fill the engine vm’s configuration infos:
Fill in admin portal password(this password will be used in web login) and continue:
Examine the configuration and click Prepare VM
:
Wait for about half an hour to see deployment successful:
Keep the default configuration:
engine vm’s storage configuration will use Gluster, path will be Gluster’s
engine volumn, and its parameter is:
backup-volfile-servers=instance2.com:instance3.com
for preventing the single-node issue for Gluster.
Click Finish deployment
, and wait for a break:
Seeing this means deploy succeeded:
Refresh the status:
4. Portal
Visit engineinstance.com
in host machine(ArchLinux):
Click Administration Portal
:
admin page is like following:
ssh into engine vm and check the disk partitions:
# ssh root@10.20.30.34
root@10.20.30.34's password:
Last login: Fri Feb 14 17:25:51 2020 from 192.168.1.1
[root@engineinstance ~]#df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 12K 1.9G 1% /dev/shm
tmpfs 1.9G 8.9M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/ovirt-root 8.0G 2.3G 5.8G 29% /
/dev/mapper/ovirt-home 1014M 33M 982M 4% /home
/dev/mapper/ovirt-tmp 2.0G 33M 2.0G 2% /tmp
/dev/mapper/ovirt-var 20G 437M 20G 3% /var
/dev/vda1 1014M 157M 858M 16% /boot
/dev/mapper/ovirt-log 10G 45M 10G 1% /var/log
/dev/mapper/ovirt-audit 1014M 34M 981M 4% /var/log/audit
tmpfs 379M 0 379M 0% /run/user/0
5. Create The First VM
5.1 Add ISO storage Domain
Login in to instance1.com
, configure nfs share storage for holding ISO
images:
[root@instance1 ]# mkdir -p /isoimages
[root@instance1 ]# chown 36:36 -R /isoimages/
[root@instance1 ]# chmod 0755 -R /isoimages/
[root@instance1 ]# vi /etc/exports
[root@instance1 ]# cat /etc/exports
/isoimages *(rw,sync,no_subtree_check,all_squash,anonuid=36,anongid=36)
[root@instance1 ]# systemctl enable --now nfs.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
In ovirt manager portal , click Storage
->Storage Domain
, click New Domain
:
Fill in name and path information:
Finished adding isoimages:
5.2 Upload iso
Login to engien vm(engineinstance.com), download the iso from official site,
we take ubuntu16.04.6 for example:
[root@engineinstance ~]# ovirt-iso-uploader -i isoimages upload ./ubuntu-16.04.6-server-amd64.iso
Please provide the REST API password for the admin@internal oVirt Engine user (CTRL+D to abort):
Uploading, please wait...
INFO: Start uploading ./ubuntu-16.04.6-server-amd64.iso
Uploading: [########################################] 100%
INFO: ./ubuntu-16.04.6-server-amd64.iso uploaded successfully
5.3 Create VM
Compute-> Virtual Machines, click new
button:
Fill in informations:
Click advanced options, select Boot Options
, then attach uploaded iso:
Click Disks, then click new
:
Fill in options:
Click this new machine, and select run->run once
:
Click OK for installation:
The installation image will be shown:
Configure installation options and wait until installation finished.
Since we use nested virtualization, the installation step will take a very
long time(>1h) for installing the os. For speedup, considering use NVME ssd
for locating the vm’s qcow2 files. Or use 3 physical servers.
On vm portal we could see our newly created vm:
Examine the vms on instance1.com:
[root@instance1 isoimages]# virsh -r list
Id Name State
----------------------------------------------------
2 HostedEngine running
4 ubuntu1604 running
6. Create vm using template
6.1 Create template
Create template via:
Check the status of template:
6.2 Create vm
Create new vm using template:
Start the machine and check result:
7. Add hosts
In engine vm, add following items:
Then we add hosts of instance2.com
and instance3.com
:
Result:
Feb 10, 2020
TechnologyOnline Steps
rhel74, default kernel is:
# uname -a
Linux node 3.10.0-693.el7.x86_64 #1 SMP Thu Jul 6 19:56:57 EDT 2017 x86_64 x86_64 x86_64 GNU/Linux
Configure repo and install newer kernel:
# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# wget https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
# rpm -ivh elrepo-release-7.0-4.el7.elrepo.noarch.rpm
# yum update -y
# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
elrepo-kernel | 2.9 kB 00:00:00
elrepo-kernel/primary_db | 1.9 MB 00:00:58
Available Packages
kernel-lt.x86_64 4.4.213-1.el7.elrepo elrepo-kernel
kernel-lt-devel.x86_64 4.4.213-1.el7.elrepo elrepo-kernel
kernel-lt-doc.noarch 4.4.213-1.el7.elrepo elrepo-kernel
kernel-lt-headers.x86_64 4.4.213-1.el7.elrepo elrepo-kernel
kernel-lt-tools.x86_64 4.4.213-1.el7.elrepo elrepo-kernel
kernel-lt-tools-libs.x86_64 4.4.213-1.el7.elrepo elrepo-kernel
kernel-lt-tools-libs-devel.x86_64 4.4.213-1.el7.elrepo elrepo-kernel
kernel-ml-devel.x86_64 5.5.2-1.el7.elrepo elrepo-kernel
kernel-ml-doc.noarch 5.5.2-1.el7.elrepo elrepo-kernel
kernel-ml-headers.x86_64 5.5.2-1.el7.elrepo elrepo-kernel
kernel-ml-tools.x86_64 5.5.2-1.el7.elrepo elrepo-kernel
kernel-ml-tools-libs.x86_64 5.5.2-1.el7.elrepo elrepo-kernel
kernel-ml-tools-libs-devel.x86_64 5.5.2-1.el7.elrepo elrepo-kernel
perf.x86_64 5.5.2-1.el7.elrepo elrepo-kernel
python-perf.x86_64 5.5.2-1.el7.elrepo elrepo-kernel
# yum --enablerepo=elrepo-kernel install kernel-ml
# sudo sed -i 's/^GRUB_DEFAULT.*/GRUB_DEFAULT=0/' /etc/default/grub
# sudo grub2-mkconfig -o /boot/grub2/grub.cfg
# sudo reboot
Check the kernel version is 5.5.2-1
:
# uname -a
Linux node 5.5.2-1.el7.elrepo.x86_64 #1 SMP Tue Feb 4 16:29:48 EST 2020 x86_64 x86_64 x86_64 GNU/Linux
# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.4 (Maipo)
Offline Steps
Scp the rpm into the server and install it via:
# scp ./kernel-ml-5.5.2-1.el7.elrepo.x86_64.rpm vagrant@xxx.xxx.xxx.xxx:/home/vagrant
# ssh into xxx.xxx.xxx.xxx
...................
$ sudo sed -i 's/^GRUB_DEFAULT.*/GRUB_DEFAULT=0/' /etc/default/grub
$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.5.2-1.el7.elrepo.x86_64
Found initrd image: /boot/initramfs-5.5.2-1.el7.elrepo.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-693.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-693.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-61b21bac36de423f82052de06e3a892b
Found initrd image:
/boot/initramfs-0-rescue-61b21bac36de423f82052de06e3a892b.img
done
$ sudo reboot
Check:
$ uname -a
Linux node 5.5.2-1.el7.elrepo.x86_64 #1 SMP Tue Feb 4 16:29:48 EST 2020 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.4 (Maipo)
Manually download them from
http://elrepo.reloumirrors.net/kernel/el7/x86_64/RPMS/
, related rpms is
listed as:
# pwd
/media/sda/rhel74NewKernel
# ls
kernel-ml-5.5.2-1.el7.elrepo.x86_64.rpm
kernel-ml-tools-5.5.2-1.el7.elrepo.x86_64.rpm
kernel-ml-devel-5.5.2-1.el7.elrepo.x86_64.rpm
kernel-ml-tools-libs-devel-5.5.2-1.el7.elrepo.x86_64.rpm
中文更新步骤
主线内核可从
http://elrepo.reloumirrors.net/kernel/el7/x86_64/RPMS/
下载,文件列表如下:
# pwd
/media/sda/rhel74NewKernel
# ls
kernel-ml-5.5.2-1.el7.elrepo.x86_64.rpm
kernel-ml-headers-5.5.2-1.el7.elrepo.x86_64.rpm
kernel-ml-tools-libs-devel-5.5.2-1.el7.elrepo.x86_64.rpm
kernel-ml-devel-5.5.2-1.el7.elrepo.x86_64.rpm
kernel-ml-tools-5.5.2-1.el7.elrepo.x86_64.rpm
注: 如果只需要升级内核,则只需要 kernel-ml-5.5.2-1.el7.elrepo.x86_64.rpm
一个包就足够,如果编译时需要内核头文件依赖,则有可能需要其他几个包。可以根据需要自行安装。
离线更新,上传包到rhel74服务器上,:
# scp ./*.rpm vagrant@xxx.xxx.xxx.xxx:/home/vagrant
# ssh into xxx.xxx.xxx.xxx
...................
$ sudo yum install -y ./kernel-ml-5.5.2-1.el7.elrepo.x86_64.rpm
$ sudo sed -i 's/^GRUB_DEFAULT.*/GRUB_DEFAULT=0/' /etc/default/grub
$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
$ sudo reboot
检查更新后结果:
$ uname -a
Linux node 5.5.2-1.el7.elrepo.x86_64 #1 SMP Tue Feb 4 16:29:48 EST 2020 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.4 (Maipo)