0%

ossfs允许您在Linux系统中将对象存储OSS的存储空间(Bucket)挂载到本地文件系统。挂载完成后,您能够像操作本地文件一样操作OSS的对象(Object),从而实现数据共享。

阅读全文 »

背景信息

服务端操作系统为 Ubuntu20.04

安装的镜像为Ubuntu-20.04-live-server-amd64

如果是虚拟机操作,需要注意网络适配器的选择,避免与局域网冲突

服务端配置

安装dnsmasq

dnsmasq同时实现了DHCP、TFTP、DNS三种服务器

1
apt install -y dnsmasq

如出现以下错误,关闭resolve并重新启动dnsmasq

image-20211221101225552

1
2
systemctl stop systemd-resolved.service && systemctl disable systemd-resolved.service
systemctl enable --now dnsmasq.service

创建TFTP 文件夹

TFTP 文件夹是TFTP服务的根目录,PXE启动过程中下载的文件都存在在该目录中

image-20211221113405877

1
mkdir -p /opt/tftp/{boot/live-server,bios,grub}

配置dnsmasq

dnsmasq的默认配置文件为/etc/dnsmasq.conf,关键配置有以下几个

配置DHCP 地址段
配置引导文件目录
配置tftp 根目录
配置日志路径
配置服务网卡,多网卡机器需关注

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
tee > /etc/dnsmasq.conf << 'EOF'
# 配置外网DNS服务器地址
server=114.114.114.144

# 指定服务的网卡
interface=ens33,lo

# 绑定端口
bind-interfaces

# 设置DHCP分发IP端范围、地址掩码、IP地址有效时间
dhcp-range=192.168.100.100,192.168.100.150,255.255.255.0,12h

# 指定网关地址 和安装无关,应该可以不配置
dhcp-option=3,192.168.100.1

# 指定DNS服务器地址 和安装无关,应该可以不配置
dhcp-option=6,114.114.114.114

# 设置引导程序相对tftp根目录的路径
dhcp-boot=/bios/pxelinux.0,pxeserver,192.168.100.1
dhcp-match=set:efi-x86_64,option:client-arch,7
dhcp-boot=tag:efi-x86_64,grub/bootx64.efi

# 打开tftp服务
enable-tftp

# 设置tftp根路径
tftp-root=/opt/tftp

# 设置日志路径
log-facility=/var/log/dnsmasq.log
EOF

修改resolv.conf,否则可能出现ping不通域名

1
echo 'nameserver 114.114.114.114' >> /etc/resolv.conf

重启dnsmasq

1
systemctl restart dnsmasq.service

安装HTTP服务器

1
apt install -y nginx

下载pxelinux包

1
2
wget https://mirrors.edge.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.03.zip
unzip syslinux-6.03.zip -d syslinux

下载UEFI包

下载uefi 引导文件shim.signedgrub-efi-amd64-signed安全启动链加载的引导程序

1
2
3
4
apt-get download shim.signed
dpkg -x shim-signed_1.40.7+15.4-0ubuntu9_amd64.deb shim
apt-get download grub-efi-amd64-signed
dpkg -x grub-efi-amd64-signed_1.167.2+2.04-1ubuntu44.2_amd64.deb grub

配置bios文件夹

1
2
3
4
5
6
cp /root/syslinux/bios/com32/elflink/ldlinux/ldlinux.c32  /opt/tftp/bios
cp /root/syslinux/bios/com32/libutil/libutil.c32 /opt/tftp/bios
cp /root/syslinux/bios/com32/menu/menu.c32 /opt/tftp/bios
cp /root/syslinux/bios/com32/menu/vesamenu.c32 /opt/tftp/bios
cp /root/syslinux/bios/core/pxelinux.0 /opt/tftp/bios
cp /root/syslinux/bios/core/lpxelinux.0 /opt/tftp/bios

配置grub文件夹

拷贝引导文件到tftp目录

1
2
cp grub/usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed /opt/tftp/grubx64.efi
cp shim/usr/lib/shim/shimx64.efi.signed /opt/tftp/grub/bootx64.efi

下载系统镜像,需要注意的是只有live版本才能支持subiquity

从镜像复制两个文件,后面会用到

1
2
cp /media/boot/grub/font.pf2 /opt/tftp/grub
cp /media/boot/grub/grub.cfg /opt/tftp/grub

配置boot文件

挂载镜像

1
mount ubuntu-20.04.3-live-server-amd64.iso /media

看到mount: /media: WARNING: device write-protected, mounted read-only.提示不影响

拷贝内核镜像文件

1
2
cp /media/casper/initrd /opt/tftp/boot/live-server
cp /media/casper/vmlinuz /opt/tftp/boot/live-server

创建引导文件夹的软链接

还需要创建一个指向/opt/tftp/boot文件夹的软链接

1
ln -s /opt/tftp/boot /opt/tftp/bios/boot

配置IP地址

创建 Web 文件夹

1
mkdir /var/www/html/{iso,autoinstall}

image-20211221115803836

说明

autoinstall 目录存放参数自动配置文件,user-data、meta-data是cloud-init要求的文件名

iso 目录存放 操作系统镜像文件

创建参数自动配置文件

先创建空文件,meta-data无需修改,user-data后续章节会详细描述配置

1
2
touch /var/www/html/autoinstall/user-data
touch /var/www/html/autoinstall/meta-data

复制镜像文件

1
cp ubuntu-20.04.3-live-server-amd64.iso /var/www/html/iso

配置pxelinux.cfg和grub.cfg文件

需要在/tftp/bios文件夹下创建名为pxelinux.cfg的文件夹。

创建 pxelinux 配置文件

1
mkdir /opt/tftp/bios/pxelinux.cfg

在此文件夹中,创建一个名为 default 的空文件此文件控制 pxelinux 行为。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
tee > /opt/tftp/bios/pxelinux.cfg/default << 'EOF'
DEFAULT menu.c32
NU TITLE ULTIMATE PXE SERVER - By Griffon - Ver 2.0
PROMPT 0
TIMEOUT 0

MENU COLOR TABMSG 37;40 #ffffffff #00000000
MENU COLOR TITLE 37;40 #ffffffff #00000000
MENU COLOR SEL 7 #ffffffff #00000000
MENU COLOR UNSEL 37;40 #ffffffff #00000000
MENU COLOR BORDER 37;40 #ffffffff #00000000

LABEL Ubuntu Server 20.04.1
kernel /boot/live-server/vmlinuz
initrd /boot/live-server/initrd
append ip=dhcp ds=nocloud-net;s=http://192.168.100.1/autoinstall/user-data url=http://192.168.100.1/iso/ubuntu-20.04.3-live-server-amd64.iso
EOF

创建 grub 配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
tee > /opt/tftp/grub/grub.cfg << EOF
if loadfont /grub/font.pf2 ; then
set gfxmode=auto
insmod efi_gop
insmod efi_uga
insmod gfxterm
terminal_output gfxterm
fi

set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
set timeout=5

menuentry "Ubuntu server 20.04 autoinstall" {
set gfxpayload=keep
linux /boot/live-server/vmlinuz root=/dev/ram0 ramdisk_size=1500000 ip=dhcp url='http://192.168.100.1/iso/ubuntu-20.04.3-live-server-amd64.iso' autoinstall ds=nocloud-net\;s=http://192.168.100.1/autoins
tall/ ---
initrd /boot/live-server/initrd
}
EOF

menuentry 之前是配置样式,也可以删除,重点关注menuentry "Ubuntu server 20.04 autoinstall"
内的配置。

指定镜像文件相对于tftp根目录的路径/boot/live-server/initrd

root=/dev/ram0 ramdisk_size=1500000为了指定内核镜像挂载空间,是否可删除待确认

ip=dhcp 指定内核镜像挂载后使用DHCP 获取IP地址

url= 指定ISO文件的网络存放路径

autoinstall ds=nocloud-net\;s=http://192.168.100.1/autoinstall/ --- 该配置指明参数自动填写,并指明配置文件所在路径

由于UEFI启动使用了grub,grub将;识别为了特殊字符,所以要在;前加\转义。

配置user-data

这个文件是我基于已经安装好的Ubuntu修改的配置(用不了报错,原因未知)

文件路径位于/var/log/installer/autoinstall-user-data

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#cloud-config
autoinstall:
apt:
geoip: true
preserve_sources_list: false
primary:
- arches: [amd64, i386]
uri: https://mirrors.tuna.tsinghua.edu.cn/ubuntu
- arches: [default]
uri: https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/
user-data:
timezone: Asia/Shanghai
identity:
username: ubuntu
hostname: server
password: "$6$exDY1mhS4KUYCE/2$zmn9ToZwTKLhCw.b4/b.ZRTIZM30JZ4QrOQ2aOXJ8yk96xpcCof0kxKwuX1kqLG/ygbJ1f8wxED22bTL4F46P0"
#The crypted password is just “ubuntu”.
kernel:
kernel: {package: linux-generic}
keyboard: {layout: us, toggle: null, variant: ''}
locale: en_US.UTF-8
network:
ethernets:
ens160: {dhcp4: true}
version: 2
ssh:
allow-pw: true
authorized-keys: []
install-server: true
storage:
config:
- {ptable: gpt, path: /dev/sda, wipe: superblock-recursive, preserve: false, name: '',
grub_device: true, type: disk, id: disk-sda}
- {device: disk-sda, size: 1048576, flag: bios_grub, number: 1, preserve: false,
grub_device: false, type: partition, id: partition-0}
- {device: disk-sda, size: 42946527232, wipe: superblock, flag: '', number: 2,
preserve: false, grub_device: false, type: partition, id: partition-1}
- {fstype: ext4, volume: partition-1, preserve: false, type: format, id: format-0}
- {path: /, device: format-0, type: mount, id: mount-0}
updates: security
version: 1

密码需要加密,可以先用工具对自己的密码进行加密后填入

代理不是必须的配置,与网络拓扑有关

磁盘分区配置要注意,配置不对会导致自动安装走不下去,提示crash。磁盘大小以及对应分区都要调整

安装过程日志在/var/log/installer/,如果安装失败可以通过nc 等工具实时发出去

开启客户机

如果正常,应该显示如下结果

image-20211221133220183

以上是BIOS引导,UEFI引导虚拟机里面无法选择

image-20211221134238984

错误提示:wget: short write: No space left on device

这种提示不是磁盘空间不足,增加内存就可以了。

参考链接:

Automated Server Installs

Ubuntu 20.04 – Deploy Ubuntu 20.04 Server through PXE (BIOS & UEFI)

基于Ubuntu 20.04 Server搭建PXE自动安装环境

Windows部署服务 (WDS) 是 RIS (RIS) 的修订版本。 WDS 支持部署Windows操作系统。 可以使用 WDS 通过基于网络的安装来设置新客户端,而无需管理员访问每台计算机或直接从 CD 或 DVD 介质安装。

阅读全文 »

持续构建与发布是我们日常工作中必不可少的一个步骤,目前大多公司都采用 Jenkins 集群来搭建符合需求的 CI/CD 流程,然而传统的 Jenkins Slave 一主多从方式会存在一些痛点,比如:

  • 主 Master 发生单点故障时,整个流程都不可用了
  • 每个 Slave 的配置环境不一样,来完成不同语言的编译打包等操作,但是这些差异化的配置导致管理起来非常不方便,维护起来也是比较费劲
  • 资源分配不均衡,有的 Slave 要运行的 job 出现排队等待,而有的 Slave 处于空闲状态
  • 资源有浪费,每台 Slave 可能是物理机或者虚拟机,当 Slave 处于空闲状态时,也不会完全释放掉资源。

正因为上面的这些种种痛点,我们渴望一种更高效更可靠的方式来完成这个 CI/CD 流程,而 Docker 虚拟化容器技术能很好的解决这个痛点,又特别是在 Kubernetes 集群环境下面能够更好来解决上面的问题,下图是基于 Kubernetes 搭建 Jenkins 集群的简单示意图:

阅读全文 »