虚拟机相关

常见问题?

VMware Workstation导出文件 ovf和ova的区别?

后缀是ovf,则会导出多个相关文件(.ovf .mf .vmdk .iso); 后缀是ova,则只会导出一个ova的压缩包。

VM ESXi是什么?

VM ESXi是VMware的一款产品。VMware服务器虚拟化的一整套解决方案叫VMware vSphere,里面包括两个重要部件:一个是ESXi,在虚拟化中通常叫Hypervisor,提供的是计算虚拟化;另一个部分叫VMware vCenter Server,是集中管理多台ESXi,并且可以实现许多高级功能,比如动态迁移、容错等功能。

VM ESXi 和 VM Workstation 的区别?

通常Windows PC用的是VMware Workstation,是提供虚拟化的软件。

ESXi和Workstation最大的区别在于系统架构不同,ESXi是裸金属结构,也就是直接安装在物理服务器上的;Workstation是寄生结构,它是装在Windows或Linux操作系统之上的.

如果不深究的话,可以认为一个是服务器版,一个是桌面版的虚拟化解决方案。

VMware vSphere是什么?

VMware vSphere则是根据企业的实际情况设计的一个虚拟化方案,它涉及的软件很多,VMware ESXi就是它其中的一种软件。

使用VMware Workstation Pro REST API服务

如何用API控制VMware虚拟机,使用 VMware Workstation Pro REST API 服务

实测配置还是比较简单的。VMware Workstation Pro REST API官方文档

还有一个调用更加专业的SDK,但看起来要vSphere才支持:https://developer.vmware.com/web/sdk/html-console/

QEMU是什么?

QEMU是一个主机上的VMM(virtual machine monitor),通过动态二进制转换来模拟CPU,并提供一系列的硬件模型,使guest os认为自己和硬件直接打交道,其实是同QEMU模拟出来的硬件打交道,QEMU再将这些指令翻译给真正硬件进行操作。 通过这种模式,guest os可以和主机上的硬盘,网卡,CPU,CD-ROM,音频设备和USB设备进行交互。但由于所有指令都需要经过QEMU来翻译,因而性能会比较差。

KVM是什么?

KVM实际是linux内核提供的虚拟化架构,可将内核直接充当hypervisor来使用。KVM需要处理器硬件本身支持虚拟化扩展,如intel VT 和AMD AMD-V技术。

QEMU-KVM是什么?

KVM负责cpu虚拟化+内存虚拟化,实现了cpu和内存的虚拟化,但kvm并不能模拟其他设备,还必须有个运行在用户空间的工具才行。 KVM的开发者选择了比较成熟的开源虚拟化软件QEMU来作为这个工具,QEMU模拟IO设备(网卡,磁盘等),对其进行了修改,最后形成了QEMU-KVM。

QEMU-KVM,是QEMU的一个特定于KVM加速模块的分支,里面包含了很多关于KVM的特定代码,与KVM模块一起配合使用。 目前QEMU-KVM已经与QEMU合二为一,所有特定于KVM的代码也都合入了QEMU,当需要与KVM模块配合使用的时候,只需要在QEMU命令行加上 --enable-kvm就可以。

ref: QEMU,KVM及QEMU-KVM介绍

QEMU的网络配置

QEMU 提供 4种网络通信方法,分别是:

1. User mode stack:用户协议栈方式,这种方式的大概原理是在 QEMU 进程中实现一个协议栈,这个协议栈可以被视为一个主机与虚拟机之间的 NAT 服务器,它负责将 QEMU 所模拟的系统网络请求转发到外部网卡上面,从而实现网络通信。但是不能将外面的请求转发到虚拟机内部,并且虚拟机 VLAN 中的每个接口必须放在 10.0.2.0 子网中。
2. socket: 为 VLAN 创建套接字,并把多个 VLAN 连接起来。
3. TAP/bridge:最重要的一种通信方式,我们想要实现 QEMU 虚拟机和外部通信就需要使用这种方式。
4. VDE:也是用于连接 VLAN 的,如果没有 VLAN 连接需求基本用不到。

重点解释TAP模式:

TAP 属于 Linux 内核支持的一种虚拟化网络设备,还有 TUN 也属于这种设备,它们完全由软件模拟实现,TUN/TAP 负责在内核协议栈和用户进程之间传送协议数据单元。
TUN 工作在网络层,而 TAP 工作在数据链路层,TUN 负责与应用程序交换 IP 数据包,而 TAP 与应用程序交换以太网帧。
所以 TUN 经常涉及路由,而 TAP 常用于网络桥接。

所谓桥接可以简单理解为在两张网卡之间搭一座桥,一端有数据就可以通过桥走到另一端,对于实现 QEMU 虚拟机通信正合适。
桥接技术在 VMWARE 中非常常用,我们设置虚拟机网络的时候就能看见桥接选项,实际上 VMware 在物理机上虚拟化了 3 张网卡,分别负责桥接、仅主机、共享网络。

ref: QEMU 网络配置一把梭

NoVNC以Web方式交付VNC远程连接

什么是noVNC?

noVNC是一个 HTML5 VNC 客户端,采用 HTML 5 WebSockets, Canvas 和 JavaScript 实现,
noVNC 被普遍用在各大云计算、虚拟机控制面板中,比如 OpenStack Dashboard 和 OpenNebula Sunstone 都用的是 noVNC。

VMware虚拟机几张网卡的作用

vmnet1是为host-only方式服务的,vmnet8是为NAT方式服务的。

  • 设置私有网络(Host Only)时,用来和主机通信,禁用以后就无法正常使用Host-Only模式了;

  • 设置网络地址翻译(NAT)时,和主机通讯使用,如果禁用,那么虚拟机在NAT模式下依然可以通过主机网卡访问外网,但不能通过内部网络和主机直接通信。

  • 而使用桥接网络时,则不需要这两个网卡了。

网络适配器模式区分

  • 使用Host-Only模式的guest系统与主机通信需要VMnet1网卡的支持;

  • 通过NAT方式上网的guest系统与主机通信需要VMnet8网卡的支持;

  • 使用桥接模式上网需要网络中存在DHCP服务器,且提供服务。

应用场景区分

  • VMnet1

使用Host-Only模式的guest系统与主机通信需要VMnet1网卡的支持

  • VMnet8

使用NAT网络模式,在宿主机安装多台虚拟机,和宿主组成一个小局域网,宿主机,虚拟机之间都可以互相通信,虚拟机也可访问外网,例如 搭建 hadoop 集群,分布式服务

  • VMNet0 (宿主机网络适配器仅增加VMnet1和VMnet8,但虚拟机网络编辑器中桥接对应VMnet0)

使用桥接模式,安装VM后,在VM里建立虚拟机 默认 就是该模式。 如果你只是需要一台虚拟机可以和宿主互通,并可以访问外网,此模式即可。

ref: https://blog.csdn.net/qq_45893475/article/details/120161930

使用VMware虚拟机模拟U盘安装Win10

U盘:UltraISO将官方iso镜像写入USB,然后开VMware虚拟机,从固件启动,设置USB启动后看是否能正常进入U盘引导。 详情见此

常用虚拟机操作指令

KVM virsh命令

高频使用命令

1.使用centos-7.6.1810-20181204-x86_64.iso创建kvm虚拟机,图形化界面开vnc端口访问
size的单位是G,值为60表示:60G = 60*1024M

virt-install \
    --cdrom=/opt/iso/centos-7.6.1810-20181204-x86_64.iso \
    --virt-type kvm \
    --name saee \
    --ram 32768 \
    --vcpus=12 \
    --disk path=/opt/vm/saee.disk,size=60 \
    --network bridge=br0 \
    --graphics vnc,listen=0.0.0.0 \
    --noautoconsole

命令参数的具体解析:

virt-install: 这是 virt-install 命令本身,用于创建和管理虚拟机。

--cdrom=/opt/iso/centos-7.6.1810-20181204-x86_64.iso: 指定用于安装虚拟机的 ISO 镜像文件的路径。

--virt-type kvm: 指定虚拟化类型为 KVM。

--name saee: 为虚拟机指定一个名称,这里为 "saee"。

--ram 32768: 指定虚拟机的内存大小为 32768 MB(32 GB)。

--vcpus=12: 指定虚拟机的虚拟 CPU 数量为 12。

--disk path=/opt/vm/saee.disk,size=60: 指定虚拟机的磁盘配置。path 参数指定虚拟机磁盘文件的路径,这里为 "/opt/vm/saee.disk",size 参数指定磁盘的大小为 60 GB。

--network bridge=br0: 指定虚拟机的网络配置。bridge 参数指定虚拟机使用的网络桥接设备,这里为 "br0"。

--graphics vnc,listen=0.0.0.0: 指定虚拟机的图形界面配置。graphics 参数指定使用 VNC 协议作为图形界面,listen 参数指定监听所有可用的网络接口。

--noautoconsole: 禁止自动连接到虚拟机的控制台。

以上是对给定命令及其参数的解析。根据实际需求,你可以根据需要进行调整和配置。请注意,在运行此命令之前,请确保已经安装了相应的软件和环境,并具备足够的权限。   

2.查看当前服务器有哪些虚拟机
virsh list --all

3.查看虚拟机的vnc端口:
virsh vncdisplay [vm_name]

:0 就用vnc访问宿主机ip:5900
:1 就用vnc访问宿主机ip:5901

注意:宿主机若已开启防火墙需要临时关闭,或者放行对应端口

3.创建快照
virsh snapshot-create-as [domain] [snapshot-name]
e.g.
virsh snapshot-create-as centos7 centos7_snapshot

4.查看指定虚拟机的快照列表
virsh snapshot-list [domain]
e.g.
virsh snapshot-list sabe

5.设置/取消开机启动

virsh list --all
# 记下要设置开机启动的虚拟机的名称或 ID。

# 设置虚拟机在宿主机启动时自动启动
virsh autostart <虚拟机名称或ID>

验证虚拟机是否已设置为自动启动
virsh list --autostart

消自动启动设置
virsh autostart --disable <虚拟机名称或ID>

更多参考: - kvm 使用入门详解 - Centos7 kvm环境制作qcow2 格式镜像

virt-manager在图形化下操作kvm虚拟机,没有就只能通过命令来操作。

5.VM虚拟机转KVM虚拟机

(个人操作发现可能有兼容性问题,不推荐)

打开终端,进入VMware安装不目录 cd D:\Program Files (x86)\VMware\VMware Workstation\
vmware-vdiskmanager.exe -r "D:\VMs\kali-linux-2022.1-vmware-amd64.vmwarevm\"
(1)vmware-vdiskmanager.exe -r "F:\共享\VM\test\xxx.vmdk" -t 0 "F:\共享\VM\xxx.vmdk"
(2)qemu-img convert xxx.vmdk -O qcow2 xxx.img
(3)挂载qcow镜像创建虚拟机:
 virt-install \
    --virt-type kvm \
    --name viper \
    --ram 2048 \
    --vcpus=2 \
    --disk path=/opt/img/xxx.img,format=qcow2 \
    --network network=default \
    --graphics vnc,listen=0.0.0.0 \
    --force \
    --import \
    --autostart \
    --os-variant ubuntu18.04 \
    --noautoconsole

补充,经测试,KVM在2核2G配置下通过iso安装Kali速度很慢,建议酌情增加配置。

virt-install \
    --cdrom=/opt/iso/kali-linux-2022.1-installer-amd64.iso \
    --virt-type kvm \
    --name kali2022.1 \
    --ram 4096 \
    --vcpus=4 \
    --disk path=/opt/vm/kali2022.1,size=200 \
    --network bridge=br0 \
    --graphics vnc,listen=0.0.0.0 \
    --noautoconsole

ref: - 迁移VMWare虚拟机到KVM - ubuntu-kvm上面deploy qcow2格式虚拟机

查询系统是否开启虚拟化

[root@localhost vm]# LC_ALL=C lscpu| grep Virtualization
Virtualization:        VT-x

查询虚拟服务是否启动

[root@localhost vm]# systemctl status libvirtd
● libvirtd.service - Virtualization daemon
   Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2022-04-07 23:59:30 CST; 18h ago
     Docs: man:libvirtd(8)
           https://libvirt.org
 Main PID: 5418 (libvirtd)
    Tasks: 20 (limit: 32768)
   Memory: 8.1M
   CGroup: /system.slice/libvirtd.service
           ├─5418 /usr/sbin/libvirtd
           ├─8334 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
           └─8335 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper

virsh结合shell批量操作虚拟机

# 批量 软关机
for i in $(virsh list --name --autostart); do virsh shutdown $i; done

# 批量 硬关机
for i in $(virsh list --name --autostart); do virsh destroy $i; done

# 批量 开启
for i in $(virsh list --name --autostart); do virsh start $i; done

# 批量开启关闭状态的虚拟机
for i in $(virsh list --name --inactive); do virsh start $i; done
# 用这条命令来判断qemu的依赖是否完全,如果缺失会报错
/usr/libexec/qemu-kvm --version 

---- 安装虚拟机 ---------------------------------------------------------------------

# CentOS7 - 无桌面安装部署kvm虚拟机
# https://baijiahao.baidu.com/s?id=1612142653122584145&wfr=spider&for=pc



# 查询cpu是否支持虚拟化,硬件虚拟化为vmx(Inter)、svm(AMD),软件虚拟的效率非常低
cat /proc/cpuinfo |grep -E 'vmx|svm'

# 查询bios是否开启虚拟化,不支持的话会显示kvm:disabled by bios,正常无回显
dmesg |grep kvm

# 安装qemu和vir
yum -y install epel-release
yum -y install qemu-kvm libvirt virt-install

# 启动服务
systemctl start libvirtd && systemctl enable libvirtd

# --virt-type:默认先kvm再qemu,强制指定kvm
# -name:虚拟机的名字
# -ram:内存大小MB
# -vcpus:CPU个数
# -cdrom:ISO镜像位置
# -network:网络
# -graphics:Guest显示设置
# --noautoconsole:不连接到控制台,默认会直接从ssh连接vnc
# -disk path:磁盘位置,size磁盘大小G

# virt-install指令可以直接写到.sh文件来执行,以免命令行粘贴出错
virt-install \
    --virt-type kvm \
    --name centos7 \
    --ram 4096  \
    --vcpus=4 \
    --cdrom=/mnt/dvd/CentOS-7-x86_64-Minimal-1810.iso \
    --disk path=/opt/vm/centos7.disk,size=512 \
    --network bridge=br0 \
    --graphics vnc,listen=0.0.0.0 --noautoconsole

virt-install \
    --virt-type kvm \
    --name dtd \
    --ram 4096  \
    --vcpus=4 \
    --cdrom=/mnt/dvd/dtd.iso \
    --disk path=/opt/vm/dtd.disk,size=2048 \
    --network network=default \
    --graphics vnc,listen=0.0.0.0 --noautoconsole

# 虚拟机桥接
/etc/qemu-kvm/bridge.conf

# 虚拟机配置,所有的命令实际上都是修改这个文件
/etc/libvirt/qemu/*.xml

# 修改配置后,重启服务
systemctl restart libvirtd

# 关闭指定虚拟机
virsh shutdown centos7

# 运行指定的虚拟机
virsh start centos7

# 重启虚拟机
virsh reboot centos7

# 强制重启虚拟机

如果reboot命令无效,则需要强制重启:
virsh destroy <VM Name or ID>
virsh start <VM Name or ID>

---- 桥接 -------------------------------------------------

# 实体机,桥接网卡配置,新建配置文件ifcfg-br0
/etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
BOOTPROTO=static
DEFROUTE=yes
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=10.0.0.100
NETMASK=255.255.255.0
GATEWAY=10.0.0.1
DNS1=114.114.114.114
ZONE=public

# 实体网卡配置,NM_CONTROLLED=no
/etc/sysconfig/network-scripts/ifcfg-enp4s0
TYPE=Ethernet
BOOTPROTO=none
NAME=enp4s0
DEVICE=enp4s0
ONBOOT=yes
BRIDGE=br0
NM_CONTROLLED=no

# 实体机,重启服务
systemctl restart network

# 虚拟机网卡桥接到br0
# 把虚拟机网卡vnet0从virbr0组删除
brctl delif virbr0 vnet0

# 把虚拟网卡vnet0添加到br0组
brctl addif br0 vnet0

brctl delif virbr0 virbr0-nic
brctl addif br0 virbr0-nic

brctl delif br0 vnet0
brctl addif br1 vnet0
brctl show

# 查看
brctl show 
    bridge name bridge id       STP enabled interfaces
    br0     8000.04d9f5888010   no          enp4s0
                                            vnet0


#  --network bridge=br0的配置
# 以network=default方式安装的虚拟机,需要修改虚拟机xml配置,否则虚拟机关闭后桥接失效
    <interface type='bridge'>
      <mac address='52:54:00:a2:84:89'/>
      <source bridge='br0'/>
      <model type='rtl8139'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>


# 虚拟机,网卡配置
/etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=10.0.0.101
NETMASK=255.255.255.0    #  我一般用255.255.0.0
GATEWAY=10.0.0.1
DNS1=114.114.114.114
ZONE=public


# 虚拟机,重启服务
# 【重要】调整网络配置前,请一定注意关闭所有虚拟机
systemctl restart network
or
systemctl restart network

# 查看指定虚拟机配置信息 mac address

virsh dumpxml tmp_frontend | grep "mac address"
      <mac address='52:54:00:c5:ac:5a'/>


vnet2  就是我新创建的虚拟机

输入命令nmcli con show 查看网卡连接信息

通过 virsh dumpxml tmp_frontend  查看虚拟机开放端口,vnet2这台的vnc是10.0.0.X:5901

然后用vnc连上vm,进行图形化安装centos,安装完成后,虚拟机会重启并关机,需要virsh start vm_name 重启虚拟机

然后用vnc连上vm,继续进行虚拟机内部网络配置,安装的什么系统就怎么配置


qemu虚拟机virsh指令

#### 查看所有虚拟机列表
virsh list --all

#### 查看开启的虚拟机列表
virsh list

#### 运行指定的虚拟机
virsh start centos7
virsh start dtd
virsh start tmp_frontend

#### 强制关闭指定虚拟机
virsh destroy centos7

#### 查看指定虚拟机的信息 
virsh dominfo 虚拟机名称
virsh dominfo sabe
virsh dominfo snort

#### 查看虚拟机网卡信息
```bash
[root@localhost ~]# virsh domiflist sabe
Interface  Type       Source     Model       MAC
-------------------------------------------------------
vnet0      bridge     br0        virtio      52:54:00:74:5e:94
vnet1      bridge     br1        virtio      52:54:00:89:8d:c5

[root@localhost ~]# virsh domiflist snort
Interface  Type       Source     Model       MAC
-------------------------------------------------------
vnet2      bridge     br0        virtio      52:54:00:e3:39:1b
vnet3      bridge     br1        rtl8139     52:54:00:f3:e8:39

查看虚拟机硬盘信息

virsh domblklist

创建快照

virsh snapshot-create-as centos7 centos7_snapshot

恢复快照

1.还原指定domain下的指定快照(高频使用) virsh snapshot-revert [domain] [snapshot-name]

e.g.: virsh snapshot-revert domain-xxx snapshot-yyy

2.还原名为centos7的虚拟机的当前快照 virsh snapshot-revert centos7 --current

查看指定虚拟机的快照列表

virsh snapshot-list sabe

删除快照

virsh snapshot-delete snort snort_snapshot

查看快照详细信息

virsh snapshot-info [domain] [snapshot-name]

sabe快照运维

virsh snapshot-delete sabe sabe_snapshot virsh snapshot-create-as sabe sabe_snapshot

virsh snapshot-delete snort snort_snapshot virsh snapshot-create-as snort snort_snapshot

FAQ

kvm网卡参数设置错误导致网卡不能承受过高流量问题排查

ovirt创建网卡的时候有3中选择,分别是:e1000rtl8139virtio

  • rtl8139 类型是 qemu-kvm 默认的模拟网卡类型, 10/100Mb/s
  • e1000 类型提供Intel e1000系的网卡模拟,纯QEMU(非qemu-kvm)默认就是提供Intel e1000系, 1Gb/s
  • virtio 类型是 qemu-kvm 对半虚拟化IO(virtio)驱动的支持,10Gb/s

rtl8139 issue


## Ubuntu18.04虚拟机配置

### 安装zsh

```shell
1.安装和切换zsh
cat /etc/shells  # 查看所有shell
echo $SHELL   # 查看当前shell

如果没有zsh,则需要现安装zsh
sudo apt install zsh

切换默认shell为zsh
chsh -s /bin/zsh
reboot

2.安装oh-my-zsh
ref: https://ohmyz.sh/#install

wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh

3.配置~/.zshrc
cd ~
git clone git://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

vim ~/.zshrc
修改这个配置
plugins=(git autojump zsh-syntax-highlighting zsh-autosuggestions)

在plugin = ()下面加这个:
setopt no_nomatch 
# 如果不加的话就不能使用*,比如:dpkg -l firefox*

安装ESC和:,输入wq!保存退出
用 source ~/.zshrc 命令更新配置文件,重启终端即可使用

4.修改主题
这里以更换主题为agnoster为例:
如果要更换默认的rubyshell,比如换成 agnoster主题 , 需要先安装相应字体
sudo apt install fonts-powerline
vim ~/.zshrc
修改 ZSH_THEME="robbyrussell" 为 ZSH_THEME="agnoster"

安装ESC和:,输入wq!保存退出
用 source ~/.zshrc 命令更新配置文件,重启终端即可

其他:
echo $HISTSIZE  # 检查历史记录数量 (可选)
HIST_STAMPS="yyyy-mm-dd"  # history信息增加时间戳展示

虚拟机使用的是此版本 VMware Workstation 不支持的硬件版本。模块“Upgrade”启动失败。未能启动虚拟机。

常见原因制作虚拟机的VM版本高于你当前机器使用的版本。

解决方案:

1、找到vmware 虚拟机存放目录,使用记事本(sublime等打开也行)方式打开.vmx 文件。
2、修改和自己Vmware匹配的版本号,比如:将 virtualHW.version = "19" 改为 virtualHW.version = "16" (注意:该参数根据VMware版本变化),保存.vmx文件。
3、使用记事本打开.vmdk 文件,将 ddb.virtualHWVersion = "19" 改为 ddb.virtualHWVersion = "16" (注意:是和自己安装的Vmware匹配的版本号),保存.vmdk后退出。
4、重新打开虚拟机,问题解决。

安装pyenv

ref: https://blog.csdn.net/wssywh/article/details/76143600

Ubuntu 18.04

$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv

$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
$ echo 'eval "$(pyenv init --path)"' >> ~/.zshrc
$ echo 'eval "$(pyenv init -)"' >> ~/.zshrc

然后,source ~/.zshrc使命令生效。

CentOS 7.6

CentOS 7.6 默认不带zsh,需要的自行安装

1. 安装依赖包:
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y

2. 安装pyenv包:
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
如果http访问要超时,可以换成ssh
git clone git@github.com:pyenv/pyenv.git ~/.pyenv

3. 设置环境变量:
vim ~/.bashrc 
export PYENV_ROOT="$HOME/.pyenv" 
export PATH="$PYENV_ROOT/bin:$PATH" 
eval "$(pyenv init --path)"

4. 激活修改的配置文件
source ~/.bashrc

不过pyenv国内源安装慢,需要使用本地安装方式。

pyenv 常用命令

pyenv versions # 查看所有安装的python版本

pyenv install --list  # 查询可安装的python版本

# ubuntu 18.04先安装一波依赖看看
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev

pyenv install 3.7.10 -v  # 加 -v参数可以看到安装进度情况
pyenv install 3.8.10 -v
pyenv install 3.9.5

如果放在~/.pyenv/cache/目录下
记得安装完成后删除
rm -rf "~/.pyenv/versions/X.Y.Z"
rm -rf "~/.pyenv/versions/3.7.10"

pyenv install太慢的解决方式

pyenv搜狐镜像源加速:http://mirrors.sohu.com/python/

下载需要的版本放到~/.pyenv/cache文件夹下面,没有目录的话就自行创建
mkdir ~/.pyenv/cache

将从官网下载的python官方安装包 Python-*.tar.xz 文件传到这个目录下

然后执行 pyenv install 版本号 安装对应的python版本

简介脚本如下,其中v表示要下载的版本号

但是sohu镜像已经不支持pyenv了
v=3.7.10|wget http://mirrors.sohu.com/python/$v/Python-$v.tar.xz -P ~/.pyenv/cache/;pyenv install $v

安装辅助插件 pyenv-virtualenv

ref: https://github.com/pyenv/pyenv-virtualenv (提及了各种python虚拟环境构建信息)

需要先安装pyenv

$ git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv

$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc

pyenv-virtualenv使用方式

# 创建虚拟环境
pyenv virtualenv 2.7.10 my-virtual-env-2.7.10
pyenv virtualenv 3.8.10 py38

# 激活虚拟环境
pyenv activate <name>
pyenv deactivate

# 删除已存在环境
pyenv uninstall my-virtual-env
pyenv virtualenv-delete my-virtual-env

virtualenv环境变量配置

CentOS 7.6

# virtualenv custom config
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv
export WORKON_HOME=$HOME/virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh

virtualenv wrapper + pyenv 使用方式

默认的python是python2,位于 /usr/bin/python pyenv 安装的python一般位于,/root/.pyenv/versions 的对应目录中

[root@localhost ~]# ls /root/.pyenv/versions
3.7.10  3.8.10  3.9.5

virtualenv wrapper + pyenv 创建虚拟环境

1.使用pyenv安装不同版本的python(参考前面的文档)

mkvirtualenv 、 workon 等命令要先安装virtualenv和virtualenv-wrapper才可用

2.使用virtualenv wrapper创建虚拟环境

mkvirtualenv py275 --python=/usr/bin/python

mkvirtualenv py3710 --python=/root/.pyenv/versions/3.7.10/bin/python

mkvirtualenv py3810 --python=/root/.pyenv/versions/3.8.10/bin/python

mkvirtualenv py395 --python=/root/.pyenv/versions/3.9.5/bin/python

创建完成后,执行命令 work on 查看所有 virtualenv wrapper 管理的虚拟环境。

执行workon on 虚拟环境名称,就会激活并进入相应的虚拟环境。

安装go

ref: https://golang.org/doc/install

先下载go的安装包
cd /tmp
wget https://golang.org/dl/go1.16.4.linux-amd64.tar.gz

上面的连接可能因为网络问题无法访问,可以用下面的镜像
wget https://studygolang.com/dl/golang/go1.16.4.linux-amd64.tar.gz

已安装过go的:
sudo rm -rf /usr/local/go && tar -C /usr/local -xzf go1.16.4.linux-amd64.tar.gz

go1.16.4是当前最新版,以后会变化

未安装过go的:
sudo tar -C /usr/local -xzf go1.16.4.linux-amd64.tar.gz

而配置环境变量
vim ~/.zshrc
export PATH=$PATH:/usr/local/go/bin
export GO111MODULE=on   # 可选,默认不设置为auto
保存退出并用 source ~/.zshrc 激活

验证安装
go version

安装ssh服务

desktop 18.04默认是没有装ssh service的,所以要先安装服务
sudo apt-get install openssh-server

启动ssh server服务
sudo service ssh start

检查是否启动成功
ps -e | grep ssh
返回结果包含 sshd表明启动成功

开机自动启动ssh命令
sudo systemctl enable ssh

查看ssh是否启动,看到Active: active (running)即表示成功
sudo systemctl status ssh

给网卡配置静态IP

vim /etc/netplan/01-network-manager-all.yaml

network:
  version: 2
  renderer: networkd    # 不能写错
  ethernets:
    ens33:   #配置的网卡名称
      dhcp4: no    #dhcp4关闭
      dhcp6: no    #dhcp6关闭
      addresses: [10.0.7.149/24]   #设置本机IP及掩码
      gateway4: 10.0.7.1   #设置网关
      nameservers:
          addresses: [114.114.114.114, 8.8.8.8]   #设置DNS


配置完成后:wq!保存退出
然后在命令行输入如下命令,应用新的Netplan更改
$ sudo netplan apply