【学习笔记】Ubuntu双系统+搭建个人服务器

2023-05-16

Ubuntu双系统+搭建个人服务器

  • 前言
  • 1. Ubuntu+Win双系统
    • 1.1 制作U盘启动盘
    • 1.2 系统分盘
    • 1.3 安装Ubuntu系统
  • 2. 搭建个人服务器
    • 2.1 设置root
    • 2.2 配置ssh
    • 2.3 向日葵连接
  • 3. 内网穿透
    • 3.1 实现流程
    • 3.2 zerotier
  • 3. 总结

前言

前段时间整了一套主机,3060ti+intel 11600F,终于不用在轻薄本上跑机器学习代码了,也不用因为服务器价格昂贵而发愁了。但是这些仅限在家中使用,一旦外出或者返校,这套主机就在家里吃灰吧,想想一年在家不超过100天时间,买来实在是性价比不高,但是我早有准备,曾有幸在某站上刷过将自家不用的机子改装成服务器的例子,这正好激发了我的兴致,所以说干就干,下面将从原理和实操角度来回顾我装机过程~


1. Ubuntu+Win双系统

PS:为什么是双系统,我想热爱游戏的朋友不会陌生,Win娱乐生产力,Ubuntu学习生产力,不耽误!
由于机子买来自带Win11系统,所以只用准备Ubuntu的安装。Ubuntu系统选用的是20.04版本,2202年了,20年的版本还是稳定可靠的(可以免费安全维护至2025年)。首先,在Ubuntu官网下载系统镜像,由于机子配置还是挺高的,鲁大师跑分能上150万+,所以果断选择了桌面版(就是任性),当然配置不足的还是选择server版吧。

1.1 制作U盘启动盘

在上文中提到下载系统镜像,如下所示:
在这里插入图片描述
下载制作U盘启动盘软件PowerISO
在这里插入图片描述
准备一个4G以上的U盘(最好是空U盘,因为制作启动盘时会格式化),注意备份,接着选中工具,制作U盘启动盘。
在这里插入图片描述
在这里插入图片描述
最后选定镜像文件,确定目标U盘,点击开始即可,这样Ubuntu启动U盘就制作完成。

1.2 系统分盘

我们必须分一定的空闲空间给Ubuntu系统运行,所以我们需要在Win系统上进行分盘。分盘步骤如下:

  1. 搜索计算机管理,打开磁盘管理。在这里插入图片描述

  2. 在想要压缩的磁盘上右键选择“压缩卷”,修改需要压缩的空间,一般大于40G都是够用的。压缩完成后就会出现未分配空间。在这里插入图片描述

  3. 选择未分配区域,右键新建卷,按照要求一步步走,然后再将新建的卷删除,就变成可用空间了。

其实这里我仍然是未分配空间,但是参考别的网上教程,都是会变成可用空间,不过就算这样,之后的系统还是能安装成功的(不知道是不是win11系统问题)。注意系统硬盘分区有两种方式,一种是bios+MBR,一种是uefi+GPT,后者的可以直接分盘,而前者会在一些特殊情况出现问题,具体可以自行百度。

1.3 安装Ubuntu系统

安装之前,要设置BIOS,这个不同主机会有不同的差异,主要以下几点:

  • 关闭快速启动。选择控制面板-电源选项-选择电源按钮的功能,选择“更改当前不可用的设置”,取消选中“启用快速启动”,不然电脑又默认直接进入Win11系统了。
  • 修改U盘为启动时的首选项。也有的电脑是选择关闭安全模式即可。

我买的是联想刃7000k主机,有可视化界面,所以这一点就友好很多。首先关机,插入启动盘,疯狂按f12进入可视化界面,选择U盘启动,这样就直接进入Ubuntu的安装界面了。一些简单的建议操作如下:

  1. 选择中文简体,点击安装Ubuntu。
  2. 键盘布局默认Chinese,直接继续。
  3. 更新和其他软件部分按需选择,我这里直接正常安装。
  4. 安装类型选择其他选项,因为我们需要自己手动分区。

接下来就是安装的重中之重了,创建分区。选中空闲分区点击加号即可设置分区。分区方案有多种,网上和各类教程书上都有详细的方案。我选择的是比较简单的分区方案,共4个分区。

  • "/boot"分区,200~300MB,我分配了300MB,存放操作系统启动引导程序,需要用它来启动ubuntu系统。
  • "/"分区,15G~20G,我分配了20G,相当于windows的c盘,主要存放系统文件。
  • "/home"分区,相当于Win中除了c盘的其他盘,可以存放安装包、用户数据等等。
  • swap分区,swap分区的意义在于当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用,而这些释放的空间就暂存在swap空间中,需要使用的时候再恢复,相当于虚拟内存的作用,以空间换时间。建议大小稍大于电脑内存,这里我分配了20G。

在这里插入图片描述
PS:由于安装的时候未截图,所以使用了网图,图片的来源我会在文末链接。

剩下的就是选择区域和填写用户名和密码,等待安装,最后重启,拔掉U盘,选择Ubuntu启动,这样Ubuntu系统就安装完毕了。
在这里插入图片描述

2. 搭建个人服务器

2.1 设置root

使用Ubuntu第一步一定要设置root,因为很多操作需要sudo的权限才能操作。

  1. 打开终端,输入sudo passwd root
  2. 在下一行输入你的密码。
  3. 再次输入,出现passwd: password updated successfully字样,表示root密码设置成功。

2.2 配置ssh

服务器远程连接一般都是通过ssh进行连接的,那么就得在Ubuntu上安装ssh并设置开机自启,这样就可以一直保持对服务器的连接了。

  • 安装命令:sudo apt-get install openssh-server
  • 确认sshserver是否启动:ps -e|grep ssh
  • 修改端口号:sudo vi /etc/ssh/sshd_config,找到# Port 22,去掉注释改成一个五位数的端口(防止端口扫描)。
  • 配置完成后重启:sudo /etc/init.d/ssh restart
  • 设置开机自启动: sudo systemctl enable ssh

这样,ssh就配置成功了。

2.3 向日葵连接

在远程连接的路上还是有不少选择的,当然我在第一步就踩了坑,这也是由于我计算机网络知识遗忘了不少,现在终于拾起,倍感惭愧。一开始我是知道可以从互联网服务商那里要求公网IP的,但是一个残酷的现实是,我的房间里没有网线,连接网络必须使用WIFI,这就涉及到NAT,网络地址转换,我的服务器在我家路由器的内网里,外界可能只知道我家的路由器(甚至不知道,后面会有解释),而不知道服务器的存在,那么外界的连接来带家中路由器就戛然而止了,它根本无法连接到我的服务器。那么该如何解决呢?
这里我还想提一嘴在一开始我犯的一个愚蠢的错误。我在Ubuntu上输入ifconfig,根据查询到的IP地址用MobaXterm进行连接,很顺利,一下子就连接上了,我当时还在想要什么公网IP,这样不就轻轻松松连上了!很快我就意识到了错误,我无意发现IP地址的开头是192.168开头,查询了下发现属于C类私网地址,并且我的笔记本也是这个开头的IP。二者在同一私网内,自然能连接起来,搭建服务器的初衷,就是在不同私网的条件下使用,所以这个愚蠢的错误差点让我白折腾一通。
那么向日葵连接,是一个付费的远程的连接工具,当然并不是所有服务都付费,免费的服务已经够我使用了,包括桌面控制、桌面查看和远程文件(SSH需要付费,如何解决看下一节),并且我只要注册好一个账号,让所有的设备都添加到设备列表中,设置开机自启自动连接账号,这样远程操控不要太舒服。
在这里插入图片描述
这里附上Ubuntu中向日葵的安装:

  1. 在向日葵官网下载对应版本。
  2. 切入安装目录,输入sudo dpkg -i XXX,XXX为对应安装包的名称。

安装好后还要设置开机自启,在终端输入gnome-session-properties,会出现如下窗口
在这里插入图片描述
命令中输入向日葵可执行文件的路径即可。

但是向日葵也经常不稳定,比如开机虽然自启,但是自动登录会经常失败,需要刷新一下才行,如果我是远程控制,那么还需要家里有人给我点一下刷新,这么麻烦的事情,还不如拉一条网线呢。这个问题困惑了我很久,一直不知道如何解决,直到今天看到了内网穿透的概念,一瞬间我豁然开朗。

3. 内网穿透

起因还是看了科技宅小明在某站发布的视频,在其中他提及了内网穿透的概念,我特地百度了一下,内网穿透,也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。这个好,我现在遇到的问题,不就是服务器受到NAT设备屏蔽无法远程连接嘛,那么该如何做呢?(NAT的原理请参考计算机网络大黑书)

3.1 实现流程

百度百科上是这样介绍的:

  1. 两个需要通过内网穿透进行通讯的内网客户端,分别将自己的外网收发接口注册给一个具有公网ip的中转服务器。在这里插入图片描述

  2. 中转服务器将两个客户端注册的收发接口分别告知给对端。
    在这里插入图片描述

  3. 一个内网客户端使自己的接收端口作为源地址,向对端的发送端口发送一个udp数据包,这个数据包称为打洞包。发送过这个打洞包后,可以在这个内网的出口路由器上产生一条NAT记录,令后续从对端发送端口发来的数据包都不被丢弃, 而是转发给相应的内网客户端的指定端口。
    在这里插入图片描述

  4. 发送过打洞包后,对端发送至本端路由器指定接收端口的数据包,就会根据NAT记录转发至本端的内网服务器接收端口,从而实现了内网服务器接收外网数据包的功能。

  5. 另一个内网服务器同样执行上述步骤 (3) 、 (4), 即可实现两端内网服务器相互收发音频数据包的功能。

这个过程听起来很复杂,我解释一下,本质就是两个内网客户端在外网服务器上注册,互相识别(本质是内网所在的路由器互相识别NAT记录),然后进行通信。这有点像探探的喜欢功能,二者只有互相喜欢(指向相同的中转服务器),才能够了解到互相的信息,然后才能够互加微信进行聊天。既然原理已经了解了,那么接下来就是用轮子的问题(PS:向日葵也是基于这个原理实现的)。

3.2 zerotier

这里使用zerotier实现内网穿透。

  1. 登录zerotier官网注册账号。

  2. 进入后台创建新一个虚拟局域网。在这里插入图片描述

  3. 进入虚拟局域网保存好网络ID。在这里插入图片描述

  4. Ubuntu安装zerotier的命令:sudo apt-get update ; sudo apt-get install curl ; curl -s https://install.zerotier.com | sudo bash。并加入局域网中:sudo zerotier-cli join 命令空格网络ID

  5. 轻薄本这边也安装zerotier软件。在这里插入图片描述

  6. 在网页中允许新设备加入局域网。在这里插入图片描述

  7. 最后,ifconfig查看zerotier地址,在MobaXterm上连接改地址即可。在这里插入图片描述

这样,通过内网穿透技术就实现了外网访问内网的服务器了,我的个人服务器也就搭建完成。

在这里插入图片描述

3. 总结

科技宅小明在视频中说,由于IPv4端口号不够用的问题,所以才产生NAT,又由于NAT都不够用的问题,所以产生大内网,即NAT套娃,所以家用路由器的IP可能还是大内网中的一个私有地址,整个大内网甚至覆盖整个小区,如果使用IPv6的话,这样的问题就不复存在了,因为IPv6地址多的用不完(地球上每一粒沙子都可以拥有一个IP),但是由于路由器的限制,导致很多还是只能用IPv4地址,这也就是我不得不通过各种方法实现服务器搭建的原因。
总的来说,这是一篇理论+操作的博客,嫌麻烦的同学可以直接略过理论部分,直接上手,大概率是不会出错的(可能几年后就不好说了)。希望对大家有所帮助,如果有疑惑或者文章部分不严谨的地方,还望批评指正。

参考链接

https://blog.csdn.net/qq_45488453/article/details/107783752
https://www.bilibili.com/video/BV1Qq4y1w7F5
https://blog.csdn.net/weixin_39824834/article/details/111534767
https://blog.csdn.net/qq_41057206/article/details/80534194
https://blog.csdn.net/weixin_40543283/article/details/84728299

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【学习笔记】Ubuntu双系统+搭建个人服务器 的相关文章

  • 三维模型转变为点云模型的好工具——CloudCompare使用小记

    普通三维模型能够直观地展示物体的三维全貌 xff0c 但是在一些场合需要将三维模型变为相应的点云模型进行展示 xff0c 而使用激光雷达等传感器采集到的点云信息往往只能反应模型表面的情况 xff0c 或是使用PCL库中的可执行文件进行转换
  • MyString(字符串类)实现

    字符串类 xff08 MyString xff09 说明文档 一 MyString 类的组成 1 1 私有成员 char data 字符型指针 int length 整型字符串长度 1 2 共有成员 1 2 1 构造与析构函数 MyStri
  • ROMFS的建立

    参考 xff1a VxWorks 7 File Systems Programmer s Guide
  • MyMatrix(二维矩阵类)实现

    二维矩阵类 xff08 MyMatrix xff09 说明文档 一 MyMatrix 类的组成 1 1 私有成员 int row 二维矩阵行数 int col 二维矩阵列数 T data 二维矩阵数据 1 2 共有成员 1 2 1 构造与析
  • 基于CUDA和TCP通信的大数据双机加速计算(CUDA加速、内存优化、TCP多机协同)

    1 环境 技术简介 1 1 程序运行环境 1 server端计算机 操作系统 xff1a Ubuntu 18 04 5 LTS 运行环境 xff1a VSCode或Bash终端 2 client端计算机 操作系统 xff1a Ubuntu
  • RGB888转换为RGB565格式

    RGB888转换为RGB565格式 RGB888用unsigned int 32位字节存储 00000000R7 R6 R5 R4 R3 R2 R1 R0 G7 G6 G5 G4 G3 G2 G1 G0 B7 B6 B5 B4 B3 B2
  • Keil5界面配置

    配置一 xff1a 绿色 Specification for text selection and caret line selection fore 61 00FFFF selection back 61 004000 caret for
  • Linux内核调试环境(centos+gdb+qemu)

    一 写在前面 主要介绍qemu在Centos中的安装过程 xff0c 以及遇到的一些麻烦 网上教程好多都是在Ubuntu环境下的安装 xff0c 但是公司给的环境大都是Centos xff0c 没办法花了一天的时间 xff0c 磕磕绊绊弄好
  • Linux中修改系统启动项grub

    在修改grub时看到很多资料 xff0c 上来就是直接修改 etc default grub配置文件中的GRUB DEFAULT配置项 xff0c 但是有时候修改不成功 xff0c 本文简单说明一下修改的原理 注 xff1a 根据本人机器上
  • C语言调用cJSON库解析json

    一 源代码文件下载 自己使用时可以只需要其中的cJSON c和cJSON h文件就可以了 xff0c 只需要将cJSON和自己的main文件一起编译即可 下载地址 xff1a cJSONFiles zip 互联网文档类资源 CSDN下载 二
  • Java学习记录 (一)

    使用 BufferedReader 按行读入文档内容 InputStream input file span class token operator 61 span null span class token punctuation sp
  • cmake学习5:如何将自己的库作为第三方库给别人使用

    前言 自己在使用cmake进行编译工程的时候不太了解cmake的基本使用方法 有时候出现找不到第三方库的问题也不知如何排查 因此相对cmake有个稍微系统的认识 希望能用这个强大的工具来更好的为自己的工程服务 因此总结为了几篇博客 主要参考
  • C++头文件包含顺序

    Google C 43 43 编程风格指南 对于头文件的包含顺序是这样的 xff1a Names and Order of Includes link Use standard order for readability and to av
  • VLC Web插件踩坑记录

    VLC Web插件 问题描述 近期由于工作项目组人员变动 xff0c 来到新的项目组 xff0c Leader约谈前期也不安排过多任务 xff0c 但是有一个项目中现有的问题需要解决 项目中视频在线播放功能需要支持在线播放 avi媒体格式
  • cmake添加第三方库

    主要方法 将包含目录添加到构建中 span class token function include directories span span class token punctuation span D span class token
  • UART+DMA数据传输

    DMA的概念 DMA xff08 Direct Memory Access xff09 即直接内存访问 xff0c DMA传输方式无需CPU直接控制传输 xff0c 通过硬件为RAM I O设备开辟一条直接传输数据的通路 xff0c 能使C
  • asp.net core 3.1 应用部署到国产服务器 centos7 自动启动

    首先安装依赖 xff1a 注册 Microsoft 密钥 注册产品存储库 安装必需的依赖项 sudo rpm Uvh https packages microsoft com config centos 7 packages microso
  • Visual Studio2022 离线安装包下载

    首先去官网下载引导程序 xff1a https docs microsoft com en us visualstudio install create an offline installation of visual studio vi
  • MWC-电机、电池螺旋桨搭配

    原址 xff1a http blog sina com cn s blog 402c071e0102v2xv html 电池 电机 螺旋桨搭配 1 电机 1 电机KV值 xff1a 大KV配小桨 xff0c 小KV配大桨 KV值是每1V的电
  • linux系统发送http请求示例:

    http post示例 xff1a curl H 34 Content Type application json 34 X POST d 39 34 ChannelInfo 34 34 algoList 34 34 CarDetectio

随机推荐

  • 博途的多步过程控制, 寄存器寻址

    1 xff0c 实际生产中 xff0c 收到的开关信号往往是短信号 脉冲 2 Step 变化的逻辑和设备的逻辑分开 Step的变化逻辑在实际中往往是设备的反馈信号决定 xff0c 在此处用定时器信号代替 定时器的触发用Step的状态触发 x
  • 栈、堆、方法区存储的内容

    堆区 1 存储的全部是对象 xff0c 每个对象都包含一个与之对应的class的信息 class的目的是得到操作指令 2 jvm只有一个堆区 heap 被所有线程共享 xff0c 堆中不存放基本类型和对象引用 xff0c 只存放对象本身 栈
  • 【verilog】UART串口发送(FPGA)

    简述核心代码仿真测试 简述 串口发送是以一定速率发送单bit数据 xff0c 通常一组数据为10bit 空闲状态为高电平 xff0c 起始位为0 xff0c 中间以低位在前的方式发送8bit数据 xff0c 终止位为1 采用计数器 cnt
  • 栈的基础知识

    0 简介 最近在自己编写一些小的算法的时候 xff0c 深感自己的算法过于臃肿 碰巧Datawhale在新的一期组队学习中组织了数据结构与算法的课程学习 于是就参加了 xff0c 再次感谢Datawhale 首先跟大家分享一下两个自己感觉比
  • AD BOM表导出

    AD BOM表导出 在REPOERT下选择bill of materials 即进行BOM输出 输出操作网上有许多教程 xff0c 这里不进行叙述 xff0c 只提一下 xff0c 必须将Value选择打钩并上拉到展示纵队中 制作自己的模板
  • STM32 的OLED的使用

    7脚OLED依次有引脚 xff1a GND VCC D0 D1 RES DC CS七个脚 模块接口定义 xff1a 1 GND 电源地 2 VCC 电源正 xff08 3 xff5e 5 5V xff09 3 D0 OLED 的 D0 脚
  • 【转载】关于Visual Studio、VC和C++的那些事

    size 61 medium 首先 xff0c 这三个东西有什么区别呢 xff1f VC和C 43 43 是相同的吗 xff0c 有什么区别呢 xff1f 我刚开始学C 43 43 的时候也有这样的问题 xff0c 在这里我来替大家解释一下
  • Byte、bit 、和16进制之间的关系

    bit xff08 比特 xff09 byte xff08 字节 xff09 一 bit xff08 比特 xff09 计算机内存储和处理信息的最小单位是位 xff08 bit 或比特 xff09 xff0c 一个比特值可以是0或1 xff
  • ROS常见问题1——找不到包

    ROS常见问题1 找不到包 1 问题 每次打开终端会提示找不到相关包或者相关文件 比如在查看自己在catkin工作区间下创建的消息时提示找不到文件 xff1a 输入 xff1a span class hljs variable span r
  • 架空线路的基本结构及组成

    最近没有什么实时的新闻发 xff0c 所以小编就给大家整理了一些干货 准备好了吗 xff1f 具体是什么干货呢 xff1f 这句话问的好 xff0c 今天小编就给大家聊一聊电力巡检的基本知识 xff1a 架空线路的基本构成及组成 架空输电线
  • 微信小程序云开发,数据库数据的增加

    1 在wxml中添加一个按钮绑定事件 xff0c 添加数据 2 在云数据库中新建一个数据文件夹list 3 在JS中添加数据 4 在数据库中即可有增加的数据
  • Anaconda如何成功配置OpenCV的开发环境

    1 打开Anaconda的运行环境 xff1a 点击Anaconda Prompt运行 2 进入环境 使盘符在Anaconda 安装目录下 进入Scripts文件夹下 xff1b 3 找到相应路径位置 xff1a 4 敲代码运行到相应盘符
  • jupyter notebook快速入门使用详解及标记的使用(Markdown使用笔记)

    1 软件 xff08 终端的打开 xff09 打开软件之后 xff0c Jupyter Notebook 将在你的默认浏览器中打开 xff0c 网址为 xff1a http localhost 8888 tree 在某些情况下 xff0c
  • F3飞控的调试

    http www moz8 com thread 109506 1 1 html
  • 航模飞机设计基础知识

    部分引用源1 xff1a KSP飞机设计简易指南 http tieba baidu com p 2272016546 FAR进阶气动稳定性和控制教程 http bbs deeptimes org forum php mod 61 viewt
  • SLA技术3D打印机的原理

    SLA是Stereo lithography Appearance的缩写 xff0c 即立体光固化成型法 用特定波长与强度的激光聚焦到光固化材料表面 xff0c 使之由点到线 xff0c 由线到面顺序凝固 xff0c 完成一个层面的绘图作业
  • STM32F103C8T6读取气压计MS5611,I2C读取模式

    笔者最近想用气压计模块来测一下相对高度 xff0c 使用的元器件如下图所示 所使用的最小系统板 所使用的气压计模块 其实读取还是蛮简单的 xff0c 根据核心板引脚图选择I2c接口 xff0c 然后借鉴正点原子的模拟i2c程序 xff0c
  • keil 的头文件

    许多初学者使用网上下载的程序时都会遇到这样一个问题 xff0c 就是头文件找不到 我想就这个问题说明一下 首先 xff0c 我们用到的KEIL有几种版本的 xff0c 头文件也不同 有reg51 h和at89x51 h两种比较常见 at89
  • 关于串口的初始化Uart_Init(0, 115200)

    void Uart Init int pclk int baud int i if pclk 61 61 0 因为Main c 中定义了 GLOBAL CLK 61 1 所以 PCLK 在 option h 中定义 在Main c 中的设置
  • 【学习笔记】Ubuntu双系统+搭建个人服务器

    Ubuntu双系统 43 搭建个人服务器 前言1 Ubuntu 43 Win双系统1 1 制作U盘启动盘1 2 系统分盘1 3 安装Ubuntu系统 2 搭建个人服务器2 1 设置root2 2 配置ssh2 3 向日葵连接 3 内网穿透3