百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

5分钟在虚拟机中搭建Linux开发环境

nanshan 2024-10-16 10:51 20 浏览 0 评论

背景

在使用Windows 10开发的过程之中避免不了使用Linux环境,比如装个数据库、装个docker跑开发环境、比如做一些实验、装一些杂七杂八的软件不影响宿主机环境、甚至仅仅是学习Linux

此时有几个选择

  1. 买台新电脑装Linux放局域网里面使用
  2. 虚拟机里面装Linux,虚拟机又有两个选择,Windows10自带的Hyper-V或者Vmware
  3. 装个Win10的docker,Win10上的docker其实也是基于Linux虚拟机

当然经济划算加上对Vmware最熟悉所以本文选择在Win10上安装Vmware,在Vmware中安装配置Linux虚拟机,具体选择如下:

  • 宿主机系统:Windows10 19042.685
  • VMware:VMware? Workstation 15 Pro,安装可参考:https://www.cnblogs.com/mr-xiong/p/12468280.html
  • Linux发行版:CentOS 7
  • 安装CentOS 7虚拟机

    镜像获取

    镜像要Minimal的,这种无GUI界面的镜像文件小,占用资源少而且稳定,正符合我们的需求,去CentOS官方镜像列表随便找个镜像站点下载

    官方镜像列表:http://isoredirect.centos.org/centos/7/isos/x86_64/

    随便找个找个镜像站,比如163的:http://mirrors.163.com/centos/7.9.2009/isos/x86_64/

    下载镜像文件,类似于CentOS-7-x86_64-Minimal-2003.iso

    安装镜像

    打开Vmware,我们选择最简单的安装方式

    1. 点击创建新的虚拟机 ,选择典型 ,这种模式内存自行给出建议值,待创建好后可自行更改内存大小
    2. 安装程序光盘映像文件(iso),选择刚刚下载的镜像文件 >
    3. 点击下一步 ,输入虚拟机名称位置
    4. 设置合适的磁盘大小,一般默认就好,不够用后面可以手动扩容
    5. 点击完成,点击界面上的Install

    此时进入了CentOS的图形化安装界面,一会会让你选择INSTALLATION DESTINATION,选择刚才在Vmware分配的硬盘,最后点击右下角的Begin Installation,如下图

    安装过程之中你需要创建用户和设置root密码,用户可以不创建,但是root密码必须设置,设置完成后点击右下角Finish configuration

    最后点击roboot,稍等一会,输入用户名和密码即可登录

    配置CentOS 7

    网络配置

    主角:网络配置文件 > /etc/sysconfig/network-scripts/ifcfg-ens33

    为啥最先说网络,因为接下来的内容都是以网络为基础的,如果网没整好,后面就很麻烦,现在你连自己机器的内网IP都不知道,SSH连接都没办法

    1. 查看Vmware的网关地址,基于VMnet8,一会要用,本例中是192.168.108.2
    1. 如果是克隆机需要重新生成一下MAC地址(右键刚才安装的虚拟机 > 设置 > 网络适配器 > 高级 > 点击下方生成重新生成MAC地址),因为物理地址不能一样,我们是新装的,不用管。
    2. 修改网络配置文件,修改前最好备份一下
    # 进入网络配置目录
    cd /etc/sysconfig/network-scripts
    
    # 修改配置文件,你的可能不一样,本例为ifcfg-ens33 
    vi ifcfg-ens33 
    
    # 修改部分如下,没有的就加上,有的就修改,别的不用管
    BOOTPROTO=static # 表示是静态IP
    ONBOOT=yes # 开机启动
    IPADDR=192.168.108.105 # IP地址,根据网关来,变动最后一位即可
    GATEWAY=192.168.108.2 # 网关地址,重要!设置错误不能上网
    NETMASK=255.255.255.0 # 掩码
    DNS1=192.168.108.2 # DNS设置成和网关一样说明用宿主机的DNS设置
    DNS2=8.8.8.8 # 备用DNS
    1. 重启使配置生效
    service network restart
    1. 最后ping一下百度,看看生效没,如下回显表示成功
    [root@192 ~]# ping www.baidu.com
    PING www.a.shifen.com (110.242.68.3) 56(84) bytes of data.
    64 bytes from 110.242.68.3 (110.242.68.3): icmp_seq=1 ttl=128 time=38.9 ms
    64 bytes from 110.242.68.3 (110.242.68.3): icmp_seq=2 ttl=128 time=38.8 ms
    64 bytes from 110.242.68.3 (110.242.68.3): icmp_seq=3 ttl=128 time=39.2 ms
    64 bytes from 110.242.68.3 (110.242.68.3): icmp_seq=4 ttl=128 time=39.1 ms
    64 bytes from 110.242.68.3 (110.242.68.3): icmp_seq=5 ttl=128 time=38.8 ms

    最后贴一份网络参数的解释

    [root@localhost network-scripts]# cat ifcfg-ens33
    TYPE=Ethernet       #网卡类型(通常是Ethemet以太网)
    PROXY_METHOD=none   #代理方式:为关闭状态
    BROWSER_ONLY=no     #只是浏览器:否
    BOOTPROTO=static    #网卡的引导协议【static:静态IP  dhcp:动态IP   none:不指定,不指定容易出现各种各样的网络受限】
    DEFROUTE=yes        #默认路由
    IPV4_FAILURE_FATAL=no       #是否开启IPV4致命错误检测
    IPV6INIT=yes        #IPV6是否自动初始化:是(现在还未用到IPV6,不会有任何影响)
    IPV6_AUTOCONF=yes   #IPV6是否自动配置:是(现在还未用到IPV6,不会有任何影响)
    IPV6_DEFROUTE=yes   #IPV6是否可以为默认路由:是(现在还未用到IPV6,不会有任何影响)
    IPV6_FAILURE_FATAL=no       #是否开启IPV6致命错误检测
    IPV6_ADDR_GEN_MODE=stable-privacy   #IPV6地址生成模型
    NAME=ens33      #网卡物理设备名称
    UUID=ab60d501-535b-49f5-a76b-3336a4120f64#通用唯一识别码,每一个网卡都会有,不能重复,否则两台linux机器只有一台可上网
    DEVICE=ens33        #网卡设备名称,必须和‘NAME’值一样
    ONBOOT=yes      #是否开机启动,要想网卡开机就启动或通过 `systemctl restart network`控制网卡,必须设置为 `yes`
    IPADDR=192.168.108.105      # 本机IP
    NETMASK=255.255.255.0       #子网掩码
    GATEWAY=192.168.108.2       #默认网关
    DNS1=8.8.8.8
    DNS2=8.8.8.5
    
    [root@localhost network-scripts]# service network restart   #重启网卡
    Restarting network (via systemctl):                        [  确定  ]

    注意点

    上面的网关地址192.168.108.2是基于VMnet8,那我们看看VMnet8这块网卡在宿主机中的地址:192.168.108.1

    其实上面的配置中,网关地址你配置成192.168.108.1192.168.108.2都可以,那这两个有什么区别?

    经过我的测试,192.168.108.1不仅仅是一个网关的角色,它还能代表宿主机(在虚拟机环境中),比如宿主机跑了一个代理在1080端口,那么虚拟机在虚拟机中telnet 192.168.108.1 1080端口是通的,而telnet 192.168.108.2 1080端口不通,要设置代理必须指定为:192.168.108.1 1080,所以192.168.108.2仅仅是一个网关,不能代表宿主机。

    代理配置

    有时候有代理的需求,比如下载一个很慢的软件,可以设置使用宿主机的代理,前提是宿主机已经有代理了。

    1. 全局代理配置,没用用户密码就不需要username:password@这一串
    #打开profile文件
    vi /etc/profile
    
    http_proxy=http://username:password@proxy_ip:port
    https_proxy=http://username:password@proxy_ip:port
    ftp_proxy=http://username:password@proxy_ip:port
    export http_proxy
    export https_proxy
    export ftp_proxy
    
    # 使代理生效
    source /etc/profile
    
    # 测试是否生效(有返回为生效)
    curl www.google.com
    1. 取消全局代理
    # 打开profile文件
    vi /etc/profile
    
    # 去掉上面的配置
    
    
    # 使生效
    source /etc/profile
    
    # unset 一下
    unset http_proxy
    unset https_proxy
    unset ftp_proxy
    
    # 测试是否生效(无返回为生效)
    curl www.google.com

    SSH配置

    主角:SSH配置文件 > /etc/ssh/sshd_config`

    SSH修改以下几个地方,第一个是允许root用户登录

  • 允许root用户登录PermitRootLogin yes
  • 关闭GSSAPI和DNS,这可能会导致SSH登录缓慢,参考:http://blog.useasp.net/archive/2014/05/19/solved-the-problem-of-ssh-client-such-as-putty-remote-login-linux-very-slowly.aspxGSSAPIAuthentication no
    UseDNS no
  • 修改完成后保存退出重启SSH服务

    service sshd restart

    在宿主机上telnet 192.168.137.129 22如果端口通,IP即上一步骤设置的IPADDR字段,即可用SSH工具连接

    安装Vmware Tools

    Vmware Tools可以允许和宿主机文件共享,具体可参考https://docs.vmware.com/cn/VMware-vSphere/6.0/com.vmware.vsphere.html.hostclient.doc/GUID-28C39A00-743B-4222-B697-6632E94A8E72.html

    为什么要放到最后来安装,是因为安装的过程需要一些依赖必须联网之后才能安装

    1. 先添加一个共享文件夹用于验证VMware Tools是否安装成功,步骤:选中虚拟机 > 右键 > 设置 > 虚拟机设置 > 选项 Tab > 共享文件夹 > 添加 ,随便选择一个文件夹添加,最后点击确认即可
    2. 在虚拟机下面点击安装Tools,或者点击顶部虚拟机 > 安装VMware Tools
    1. 安装依赖
    yum install -y perl
    yum install -y net-tools
    yum install -y gcc
    yum install -y kernel*
    1. 执行如下命令
    # 挂载cdrom
    mkdir /mnt/cdrom
    mount /dev/cdrom /mnt/cdrom
    
    # 复制并解压
    cd /mnt/cdrom 
    cp VMwareTools-10.3.10-13959562.tar.gz /tmp
    cd /tmp && tar zxvf VMwareTools-10.3.10-13959562.tar.gz
    
    # 安装
    /tmp/vmware-tools-distrib/vmware-install.pl
    1. 安装过程之中一路回车使用默认选项即可
    2. 输入df -h如果看到类似如下回显则成功
    .host:/                  1.9T  1.4T  473G   75% /mnt/hgfs

    或者直接ls /mnt/hgfs/看看是否有最开始设置的文件夹即可!

    可能出现的问题

  • 如果出现bash:./vmware-install.pl :/usr/bin/perl:bad interpreter:No such file or directory.现象,需要安装Perl支持
  • yum groupinstall "Perl Support"
  • The path "" is not a valid path to the 3.8.13-44.1.1.el6uek.x86_64 kernel
  • 可能的原因是kernel版本不一致的问题,检查一下本机kernel版本:uname -r,再看一下安装的kernel相关组件是否和本机的kernel版本不一致:rpm -qa|grep kernel,对比一下,找到不一致的remove掉:yum remove XXXXX,最后重新安装kernel相关组件:yum install -y kernel*

    参考:https://blog.csdn.net/u012820996/article/details/81463535、https://blog.csdn.net/ljunjie82/article/details/48895939

    设置系统时间

    # 覆盖系统时间
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    
    # 更新系统硬件时间
    hwclock

    安装常用软件

    安装之前先更新一下软件库

    yum -y update
    yum -y remove epel-release
    yum -y install epel-release

    iptables

    CentOS 7 默认的防火墙是firewall,对于喜欢iptables的老铁可以直接更换成iptables

    service iptables status                     # 先检查是否安装了iptables
    yum install -y iptables                     # 安装iptables
    yum update iptables                         # 升级iptables
    yum install -y iptables-services            # 安装iptables-services (CentOS 7)
    systemctl stop firewalld.service            # 停止firewall
    systemctl disable firewalld.service         # 禁止firewall开机启动
    firewall-cmd --state                        # 查看默认防火墙状态(关闭后显示not running,开启后显示running)
    systemctl mask firewalld                    # 禁用firewalld服务
    
    #规则层级
    iptables -P INPUT ACCEPT                    # 先允许所有,不然有可能会清除后断开连接,无法再连接
    iptables -F                                 # 清空所有默认规则
    iptables -X                                 # 清空所有自定义规则
    iptables -Z                                 # 所有计数器归0
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT   #允许本机入站 否则无法联网
    iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT  #允许本机出站 否则无法联网
    iptables -P INPUT DROP
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD DROP
    
    
    #iptables层级
    service iptables save
    systemctl enable iptables.service   # 注册iptables服务 #相当于以前的chkconfig iptables on 
    systemctl start iptables.service    # 开启服务
    systemctl status iptables.service   # 查看状态

    docker

    大家对docker肯定是不陌生的,如果还不知道docker的话,可以看之前的文章:都9102年了,还没听过docker?5分钟带你了解docker的前世今生!、史上最全(全平台)docker安装方法!

    一键安装

    懒人必备官方提供的一键安装脚本:wget -qO- https://get.docker.com/ | bash

    标准版

    #!/bin/bash
    # remove old version
    sudo yum remove docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-selinux \
                      docker-engine-selinux \
                      docker-engine
    
    # remove all docker data 
    sudo rm -rf /var/lib/docker
    
    #  preinstall utils 
    sudo yum install -y yum-utils \
      device-mapper-persistent-data \
      lvm2
    
    # add repository
    sudo yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo
    
    # make cache
    sudo yum makecache fast
    
    # install the latest stable version of docker
    sudo yum install -y docker-ce
    
    # start deamon and enable auto start when power on
    sudo systemctl start docker
    sudo systemctl enable docker
    
    # add current user 
    sudo groupadd docker
    sudo gpasswd -a ${USER} docker
    sudo systemctl restart docker

    国内镜像版

    #!/bin/bash
    # 移除掉旧的版本
    sudo yum remove docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-selinux \
                      docker-engine-selinux \
                      docker-engine
    
    # 删除所有旧的数据
    sudo rm -rf /var/lib/docker
    
    #  安装依赖包
    sudo yum install -y yum-utils \
      device-mapper-persistent-data \
      lvm2
    
    # 添加源,使用了阿里云镜像
    sudo yum-config-manager \
        --add-repo \
        http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    # 配置缓存
    sudo yum makecache fast
    
    # 安装最新稳定版本的docker
    sudo yum install -y docker-ce
    
    # 配置镜像加速器
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["http://hub-mirror.c.163.com"]
    }
    EOF
    
    # 启动docker引擎并设置开机启动
    sudo systemctl start docker
    sudo systemctl enable docker
    
    # 配置当前用户对docker的执行权限
    sudo groupadd docker
    sudo gpasswd -a ${USER} docker
    sudo systemctl restart docker

    注意:国内访问docker太慢,一般会配置加速器,此处配置的加速器是163的加速器:http://hub-mirror.c.163.com,也可以配置阿里云的加速器。

    dockerveth

    查看docker容器与网卡的对应关系

    rm -rf /usr/local/bin/dockerveth
    curl -o /usr/local/bin/dockerveth https://raw.githubusercontent.com/micahculpepper/dockerveth/master/dockerveth.sh
    chmod +x /usr/local/bin/dockerveth

    Java

    这个就不说了,Java环境必备

    # 安装java
    yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel which
    
    # 环境变量设置
    cat > /etc/profile.d/java8.sh <<EOF
    export JAVA_HOME=$(dirname $(dirname $(readlink $(readlink $(which javac)))))
    export PATH=\$PATH:\$JAVA_HOME/bin
    export CLASSPATH=.:\$JAVA_HOME/jre/lib:\$JAVA_HOME/lib:\$JAVA_HOME/lib/tools.jar
    EOF
    source /etc/profile.d/java8.sh
    

    fail2ban

    多次SSH登录失败就封禁IP,避免SSH被爆破

    yum -y install fail2ban
    echo 'fail2ban install complete............'
    cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
    echo 'conf file copy complete.............'
    sed -i '/^\[sshd\]/a enabled = true' /etc/fail2ban/jail.local
    echo 'sshd has enabled.....'
    systemctl restart fail2ban.service
    echo 'fail2ban has restart...'
    systemctl enable fail2ban.service
    echo 'fail2ban has added auto started...'
    echo '=========================fail2ban sshd status==============================='
    sleep 4
    fail2ban-client status sshd

    常用小工具

    # zip压缩
    hash zip 2>/dev/null || {
    	yum -y install zip
    }
    
    # 解压
    hash unzip 2>/dev/null || {
    	yum -y install unzip
    }
    
    # GIT
    hash git 2>/dev/null || {
    	yum -y install git
    }
    
    # ifconfig命令
    hash ifconfig 2>/dev/null || {
    	yum -y install net-tools
    }
    
    # telnet命令
    hash telnet 2>/dev/null || {
    	yum -y install telnet-server
        yum -y install telnet
    }
    
    # wget命令
    hash wget 2>/dev/null || {
    	yum -y install wget
    }

    BBR

    bbr是谷歌出品的解决TCP拥堵一定程度上提升网速的算法

    wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh && chmod +x bbr.sh && ./bbr.sh

    参考

  • VMware Workstation 15中文破解版 下载与安装(附密钥):https://www.cnblogs.com/mr-xiong/p/12468280.html
  • CentOS Mirrors List
  • SSH客户端(如PuTTY)ssh远程登录Linux非常慢的解决方法
  • VMware Tools 简介
  • Linux安装Vmware-tools步骤(命令行)+The path is not valid path to...排错
  • 安装vmware-tools遇The path "" is not a valid path to the 3.8.13-44.1.1.el6uek.x86_64 kernel问题解决
  • 相关推荐

    MongoDB 从入门到实战:.NET 平台完整指南

    一、什么是MongoDBMongoDB是一种功能强大且灵活的NoSQL数据库,适用于处理大规模的半结构化数据和高并发场景。它不依赖于固定的表结构和关系模型,而是以文档的形式存储数据,每个文档可...

    NET Framework安装失败的原因及解决方法

    大家好我是艾西,一个做服务器租用的游戏爱好者兼网络架构系统环境问题网络工具人。在我们平时使用PC安装某些程序会出现.NETFramework缺失的提示,那么也会有很多的小伙伴搞不懂什么原因导致的,这...

    这可是全网eNSP安装最完整,最详细的图解,没有之一(常见问题)

    eNSP安装大纲eNSP安装详细图解篇幅较长,会分三篇更完。急需安装的朋友可以在文末获取图解文档和所需软件工具。ENSP安装常见问题和解决方案Vbox安装错误eNSP在安装的过程当中,经常会出现一...

    如何在windows 2012安装.NET Framework3.5

    Windowsserver2012R2,自带的是.NETFramework4.5,如果想装SQLserver2008或者SQLserver2012需要安装.ENTFramework...

    3款国内可用的「Chrome」扩展下载网站

    身为程序员,有几个不使用Chrome浏览器提升下编码效率呢?Chrome拥有众多丰富强大的扩展程序,今天给大家分享三个国内可用的Chrome扩展下载网站,收藏一下吧,不然下次就找不到我咯!C...

    下载 Windows 10 应用商店程序离线包方法

    有厂商为了图方便,会把Windows10应用商店里面的UMP应用改成EXE程序版本。例如之前「网易云音乐」UMP版本简洁清爽,获得不少用户推荐,后来官方懒得更新了,直接把UMP版本...

    极速安装!NET Framework 3.5零距离指南!

    .NETFramework3.5是一款由微软开发的应用程序框架,它为许多Windows应用程序提供了基础支持。它的新版本带来了许多令人兴奋的功能和改进,比如增强的XML和JSON处理能力以及强大的...

    Microsoft.NET离线运行库合集发布 2021

    软件介绍.NET是微软具有战略意义的框架,也是装机必不可少的框架,想要一个一个安装略显繁琐,再加上很多电脑小白不知道怎么下载,不小心就下载到某某高速加载器,这个运行库极大解决了这个问题,采用微软官方....

    缺少.net framework 3.5怎么办?(缺少.net4.5.1或以上环境)

    很多电脑用户在玩某些程序游戏时都会遇到一个头痛的问题,弹出缺少“NETFramework3.5”的提示。微软从Windows8开始默认屏蔽了“.NET3.5”,如果用户有需要就必须选择在线安装...

    Windows11无法正常安装.net 3.5组件的解决方法

    最近因公司部分电脑升级至Windows11之后,重新安装某些需要加载.net3.5组件的应用软件时,都提示无法完成加载或安装.net3.5而导致无法完成安装。使用离线安装包亦一样无法完成安装。一...

    离线安装.Net Framework 3.5(离线安装.net framework 4.0)

    前言.Net3.5已经越来越少用到了,但是偶尔还是会遇到一些老软件需要。而Win10、Win11的系统,直接在控制面板的里添加,经常会添加失败!解决方法首先需要一个系统的ISO镜像来提取sxs文件夹:...

    Jenkins 11个使用技巧,90%以上的人没用过

    一、Performance插件兼容性问题自由风格项目中,有使用Performance插件收集构建产物,但是截至到目前最新版本(Jenkinsv2.298,Performance:v3.19),此...

    6款Linux常用远程连接工具,你最中意哪一款?

    点击上方头像关注我,每周上午09:00准时推送,每月不定期赠送技术书籍。本文2106字,阅读约需6分钟Hi,大家好。远程连接的实现方法有很多,概括地说有两种,一种是用系统自带的远程连接,另外一种是用...

    Linux常用远程连接工具介绍,总有一款适合你

    作为运维或者网工最常用就是ssh远程和远程桌面工具,本文就介绍几个常用的远程连接工具,你在用哪一款呢SecureCRT介绍:我觉得这个是最好的SSH工具,没有之一。SecureCRT支持SSH,同时支...

    终极软路由网络设置,ESXi虚拟机安装iKuai+openWrt双路由系统

    本内容来源于@什么值得买APP,观点仅代表作者本人|作者:BigBubbleGum本文是软路由系列的第五篇,也是折腾时间最长的一篇,在ESXi下分别独立安装和使用iKuai和openWrt...

    取消回复欢迎 发表评论: