操作系统课程设计的技巧与踩坑

短学期在上学校的《操作系统课程设计》课,第一堂是虚拟机安装 Fedora 7 和编译内核。这里总结总结自己踩到的坑,和一些好用的技巧。

Fedora 7 启用 SSH

Fedora 7 实在是太老了。网络上找不到特别对应这个版本的教程,但其他教程也可以参考。总结启用 SSH 的流程如下:

  • 关闭防火墙和 SELinux

    只是在本地做做实验,要啥安全性?执行 setup 命令,调整防火墙设置如下:

  • 检查是否已安装 SSH 服务

    执行 rpm -qa | grep openssh-server。如果有内容就说明已安装,否则用 yum install openssh-server 安装之。

    yum 下载慢的,可安装 yum-fastestmirror 插件自动选择最快源。

  • 修改配置文件

    $ vim /etc/ssh/sshd_config
    

    放开如下配置:

    Port 22
    Protocol 2
    PermitRootLogin yes
    MaxAuthTries 6
    
  • 重启 SSH 服务

    $ /etc/rc.d/init.d/sshd restart
    $ service sshd status
    

    提示服务正在运行即可。

VBox 虚拟机配置与宿主机网络互访

仅 NAT 方式

配置虚拟机时网络选项使用 “网络地址转换(NAT)” 选项可以傻瓜式免配置地让 Fedora 访问到外网,但是在主机去 Ping 虚拟机 ip add 命令显示的 IP,是 Ping 不通的。

VBox 相比 VMWare,在处理 NAT 时,并不映射到一块具体的虚拟网卡。也可以注意到,虚拟机内显示的 IP 与主机并不在同一网段,自然是不通的。

相比起 VMWare,如果要在 NAT 下连到虚拟机的 22 端口,则需要配置端口转发:

如按上图配置,则 localhost:20022 将映射到虚拟机的 22 端口。使用 tcping 可以验证端口打通:

此时可使用 Xshell、PuTTY 等 SSH 工具连接虚拟机了。

双网卡方式

上面的方法很蠢。如果需要映射大量端口,不可能一一配置。并且使用 localhost 而不是虚拟机 IP 也很别扭。为此,可以使用双网卡方式,彻底将虚拟机映射到一张虚拟网卡。这也将为我们后面配置 Samba 打下基础。

在 VBox 中打开 “主机网络管理器”,配置默认添加的 Host-Only 虚拟网卡。

按照自己的情况分划一段空闲网段,并启动 DHCP 服务器功能。保存后使用 ipconfig 验证配置完成:

然后为虚拟机分派第二张网卡,映到该虚拟网卡:

再启动虚拟机,即可使用 ip add 命令看到第二张网卡及上面的IP。使用该 IP 即可从主机对应访问虚拟机,无需端口映射。

现在就可以自由地使用该 IP 来 SSH 连接虚拟机了。由于我这里只有一台虚拟机工作,因此它会稳定占据 DHCP 地址池的第一个 IP。如果有需要,你可以配置静态 IP,此处不述。

内核下载

实验要求使用 linux-2.6.21.7 内核,搜了一下,这玩意好像只能在一个叫 linuxgrill 的网站下到。然而,这网站的下载速度实在是一言难尽,即使是“科学”技术也无法拯救个位数的下载速度。在此感谢我的强大舍友王同学,使用百度云会员离线下载等奇技淫巧,终于把这个文件弄了下来。

我把它搬到了自己国内的云服务器上,有需要的同学可以使用这个网址下载:

$ wget http://zxuuu.tech:8008/share/linux-2.6.21.7.tar.bz2

从 VSCode Remote 到 Samba

为了能用地表最强编辑器 VSCode 编写代码,自然想到用 Remote SSH 插件连接虚拟机。然而,Fedora 7 实在是太老了。连接时直接报错:

打扰了,这似乎不是我们有能力解决的错误。这不禁让我想到在腾讯实习时,也有那几台跑着远古 tLinux 的老爷机用不上 Remote SSH…

退而求其次,我们换用古老一点的 Samba 技术来做这件事。首先在虚拟机上配置一波:

  • 安装 Samba

    执行 rpm -qa | grep samba,观察是否输出如下三个包:

    [root@localhost ssh]# rpm -qa | grep samba
    samba-3.0.28a-1.fc7
    samba-common-3.0.28a-1.fc7
    samba-client-3.0.28a-1.fc7
    

    如果没有,则缺哪个装哪个:

    $ yum install samba samba-common samba-client
    
  • 编辑 Samba 配置文件

    执行 vim /etc/samba/smb.conf,修改如下几个地方:

    • (74行左右) workgroup = WORKGROUP
      
    • (101行左右) security = user
      
    • 在 246 行左右 Share Definitions 下新增:

      [samba]
              comment = samba
              path = /
              public = yes
              writable = yes
              valid users = root
              create mask = 0700
              directory mask = 0700
      

      最后看起来大概是这样:

  • 添加 Samba 用户并激活

    $ smbpasswd -a root
    $ smbpasswd -e root
    
  • 守护 Samba 服务

    $ chkconfig smb on
    $ chkconfig --list smb  # 检查2~5为on
    $ chkconfig nmb on
    $ chkconfig --list nmb  # 检查2~5为on
    $ /etc/rc.d/init.d/smb start
    $ /etc/rc.d/init.d/nmb start
    

    配置至此,reboot 虚拟机。

  • 在 Windows 下启用 Samba

    Samba 在 Windows 10 下默认是关闭的。我们需要将它手动启动。打开控制面板 - 程序和功能 - 启用或关闭 Windows 功能,将 SMB 打勾:

    按提示要求重启电脑。

  • 通过 Samba 连接虚拟机

    在文件资源管理器任意页面用双反斜杠加 IP 即可访问。如有需要也可将该地址做成快捷方式放到桌面。

    这时,所有的文件都可以访问:

    使用 VSCode 也可自由打开、编辑其中的文件,虚拟机就像是挂载主机上的一块硬盘了:

    并且,与 Remote SSH 不同的是,Samba 下使用 VSCode 不依赖远端的 VSCode Server。这意味着本地安装的所有插件、配置都可以直接使用,不需要再次安装。

    舒服了,代码搜索、代码跳转等等功能都到手了。当然,个人不建议在这上面用终端(因为与远端并不完全等价),最好还是用 Xshell 连着的终端来操作。

  • 配置 VSCode includePath

    此时 VSCode 由于不了解 Linux 的 include 文件,无法正确进行代码提示,存在头文件划红线的情况。为此,可增加工作区配置。在项目目录新建 .vscode/settings.json 文件,键入如下内容:

    {
      "C_Cpp.default.includePath": ["\\\\<ip_to_linux>/samba/usr/include", "\\\\<ip_to_linux>/samba/usr/local/include"]
    }
    

内核编译加速技巧

基本方法

众所周知,增大系统内存、使用 SSD、增加 CPU 核心数,都可以有效加快编译速度。如有条件,使用内存盘可以成吨加快编译。由于是虚拟机,咱不折腾,多给点内存就好了。

多线编译

make 命令可带参数 -j2、-j4 等启用二线、四线并发编译,这也可以有效加快编译速度,但并不一定是数字越大越好。在我的机器上,使用 -j2 ,按照实验指导书的配置,全套编译流程在 20 分钟左右。这个加速比较可观。

内核裁剪

按照实验指导书的配置,make 内核时,用的配置文件直接是 Fedora 7 系统带的配置。这意味着大量根本用不到的内核功能都会编译进去…在编译前 make menuconfig ,对不需要的功能进行裁剪,使用自定义的配置文件来编译内核,必然可以有效缩小内核大小,加快编译流程。对内核裁剪有兴趣的,可自行搜索相关资料研究,此处不述。

posted @ 2020-09-08 12:11  z0gSh1u  阅读(326)  评论(0编辑  收藏  举报