虚拟机相关
常见问题?
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中选择,分别是:e1000
,rtl8139
,virtio
。
- rtl8139 类型是 qemu-kvm 默认的模拟网卡类型, 10/100Mb/s
- e1000 类型提供Intel e1000系的网卡模拟,纯QEMU(非qemu-kvm)默认就是提供Intel e1000系, 1Gb/s
- virtio 类型是 qemu-kvm 对半虚拟化IO(virtio)驱动的支持,10Gb/s
## 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