Ubuntu安装
安装
1.启用Linux子系统
在系统设置的更新和安全中开启开发者选项。
然后打开 控制面板 -> 程序 -> 启用或关闭Windows功能。找到“适用于Linux的Windows子系统”和“虚拟机平台”,Hyper-v,勾选这三项之后确定,并重新启动计算机。
2.切换系统WSL默认版本到2
使用管理员用户打开CMD,运行:wsl --set-default-version 2
3.Windows自带应用商店中搜索Ubuntu,选一个版本安装。(我这里安装的是20.04LTS )
4.下载完毕后气筒Ubuntu,并在窗口中设置默认登录账号与密码。注意,Linux的密码输入是不提示*号的,只能盲打密码。
开放远程连接端口
注意,这一步是非必要的
由于我这里是准备将该物理机单独出来作为服务器的,所有访问都准备用远程连接的方式,所以需要对电脑进行一些设置。
固定电脑IP
首先,我们需要将IP设置为固定IP地址,防止一些特殊情况导致的物理机IP地址变更。
依次打开控制面板\网络和 Internet\网络和共享中心->更改适配器设置
然后点击物理机主要联网的设备->状态->详细信息,记录下图中框选部分的内容。
接下来我们点击属性->IPV4->属性,然后设置为使用下面的IP(DNS)地址,填入上一步截图的地址,点击确定保存。
升级SSH
-
卸载openssh
sudo apt-get autoremove --purge openssh-server openssh-client
-
更新
sudo apt-get update
-
安装ssh服务端和客户端
sudo apt-get install openssh-server openssh-client
-
查看服务是否启动,如果正常启动了入下图所示,如果没有启动则没有任何输出。
ps -e|grep ssh
-
启动ssh
sudo service ssh start
-
若启动失败,了解错误原因
sshd -t
-
确认ssh-server已经正常工作
netstat -tlp
cmd ssh 访问Ubuntu
在物理机中按下Ctrl+R
,输入cmd
回车,调出命令提示行。
输入ipconfig
,查询本机IP地址。
输入ssh (Ubuntu的用户名)@(IP地址)
回车,然后输入Ubuntu的密码。登录Ubuntu。如果没有登录上去,说明之前Ubuntu的安装出问题了,或者电脑没有安装ssh功能。
设置防火墙入站规则
依次打开:控制面板\系统和安全\Windows Defender 防火墙,点击左侧高级设置。
然后点击入站规则->新建规则。
依次选择:端口,下一步,特定端口(输入22),下一步,允许连接,下一步,默认设置,下一步,名称输入ssh,完成。
很多教程说关闭系统防火墙,其实是很危险行为,我们只需要为特定的访问端口开辟特殊权限就行,不必关闭整个防火墙。
局域网访问Ubuntu
接下来我们可以使用局域网上的另外一台物理机来访问Ubuntu
输入ssh (Ubuntu的用户名)@(Ubuntu物理机的IP地址)
,回车
登录成功,后面就可以远程操控该服务器系统了。
WSL2开放远程连接端口
前面讲到的是WSL的开放端口操作,如果是使用的WSL2,则还需要进行如下操作。
固定WSL的IP地址
wsl2是由windows 的Hyper-V 虚拟平台创建,每次重启windows之后Hyper-V 会重新启动,自然wsl2之前设置好的固定ip也会被重置。而wsl1不一样,wsl1的IP地址和Windows系统是共享的。
创建文本文档,写入如下内容后更改后缀为.bat文件。每次启动以管理员身份运行(电脑重启后会失效,需要再次运行,后面会给出开机自启的方案)。
@echo off
setlocal enabledelayedexpansion
::停掉可能在跑的wsl实例
wsl --shutdown Ubuntu-20.04
::重新拉起来,并且用root的身份,启动ssh服务和docker服务
wsl -d Ubuntu-20.04 -u root service ssh start
if !errorlevel! equ 0 (
echo docker start success
:: 看看我要的IP在不在
wsl -u root ip addr | findstr "192.168.120.181" > nul
if !errorlevel! equ 0 (
echo wsl ip has set
) else (
::不在的话给安排上
wsl -u root ip addr add 192.168.120.181/24 broadcast 192.168.120.0 dev eth0 label eth0:1
echo set wsl ip success: 192.168.120.181
)
::windows作为wsl的宿主,在wsl的固定IP的同一网段也给安排另外一个IP
ipconfig | findstr "192.168.120.100" > nul
if !errorlevel! equ 0 (
echo windows ip has set
) else (
netsh interface ip add address "vEthernet (WSL)" 192.168.120.100 255.255.255.0
echo set windows ip success: 192.168.120.100
)
)
其中192.168.120.181
是设置WSL的IP地址(仅在物理机内部生效),192.168.120.100
是为WSL的宿主容器设置的IP地址。
设置Windows开机自启
在Windows中打开任务计划程序,创建任务。
在常规面板设置启动名称,勾选不管用户是否登录都要运行,使用最高权限运行。
在触发器面板设置触发条件为启动时
设置操作面板增加启动程序,程序选中我们上一步创建的.bat文件
后续重启电脑后就会自动执行该文件了
WSL端口转发
如果是在本地物理机上访问,直接使用127.0.0.1即可,但是想在局域网中访问,就需要用到端口转发了
控制台中输入ip a
查询WSL的IP地址。
172.25.82.107
是WSL原始的内部IP地址,每次启动改变,192.168.120.181
是我们上一步为WSL增加的固定IP地址。
用管理员身份打开PowerShell,输入如下指令进行端口转发
netsh interface portproxy add v4tov4 listenport=22 listenaddress=0.0.0.0 connectport=22 connectaddress=192.168.120.181
listenport:要转发的Windows端口,listenaddress:监听的IP地址(一台物理机可能有多个网卡,所以会有多个地址,0.0.0.0为监听所有IP),connectport:转发到目标的端口号,connectaddress:转发到目标的IP地址。
输入如下指令查询已经转发的端口
netsh interface portproxy show all
输入如下指令关闭指定端口的转发
netsh interface portproxy delete v4tov4 listenport= 22 listenaddress=0.0.0.0
GitLab
安装
如果使用的是SWL,需要升级到SWL2,且先处理完无法使用systemctl命令的问题(后面Bug中有提到)
1.依次在Ubuntu中输入以下命令,在弹窗中直接回车就好
sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates
sudo apt-get install -y postfix
2.然后输入如下代码,信任GitLab的GPS公钥
curl https://packages.gitlab.com/gpg.key 2> /dev/null | sudo apt-key add - &>/dev/null
3.输入sudo -i
进入root模式使用vim进行配置:(按a进入文本编辑模式,按ecs退出编辑模式,输入:q 直接退出,输入:wq保存退出,输入:q!强制退出)
vim /etc/apt/sources.list.d/gitlab-ce.list
4.根据安装的Ubuntu选择不同的版本gitlab-ce 镜像站,复制其中内容到配置中。
deb https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu bionic main
5.依次输入如下命令进行GitLab安装,安装成功会出现如下界面
sudo apt-get update
sudo apt-get install gitlab-ce
6.执行配置
(这一步执行报错的请查阅后面Bug栏提到的Ubuntu安装时无法使用systemctl命令Bug)
sudo gitlab-ctl reconfigure
7.启动GitLab
sudo gitlab-ctl start
停止Gitlab命令
sudo gitlab-ctl stop
接下来,我们可以在物理机的浏览器中输入127.0.0.1:80来访问GitLab
开放IP与端口
现在我们还只能在GitLab的宿主物理机上进行访问,想要通过局域网访问,还需要如下修改。
-
在物理机中用管理员身份打开PowerShell,执行如下代码,转发80端口到wsl。(具体操作参考前文提到的WSL端口转发)
netsh interface portproxy add v4tov4 listenport=80 listenaddress=0.0.0.0 connectport=80 connectaddress=192.168.120.181
-
修改GitLab配置文件中的IP地址。
在Ubuntu控制台中输入如下指令,打开gitlab.rb文件进行修改。
sudo -e /etc/gitlab/gitlab.rb
修改上面绿色部分的IP地址为Ubuntu宿主机(Windows)的IP地址。Ctrl+X保存,然后回车
然后执行指令
sudo gitlab-ctl reconfigure
,更新配置接下来我们就可以在局域网上物理机的浏览器中,输入192.168.1.20来访问Gitlab。
修改GitLab管理员账号密码
-
在Ubuntu控制台中输入
sudo -i
切换到超级用户 -
输入
su - git
切换到git用户 -
输入
gitlab-rails console
切换到root用户 -
使用
user = User.where(id: 1).first
,定位到id=1的用户,就是超级管理员 -
输入
user.password='你的密码'
,修改密码 -
输入
user.save!
,保存更改
Bug
Ubuntu启动失败
Ubuntu安装后打开可能遇到如下情况,出现这个提示,说明需要更新WSL2的内核。
按照提示打开https://aka.ms/wslusers链接。点击下图中的下载链接,下载并安装WSL2内核。
无法使用systemctl命令
当我们使用reboot
命令重启Ubuntu时会报如下错误
解决办法:
-
输入以下指令,更新软件仓库
sudo apt-get update
-
安装daemonize和fontconfig
sudo apt install -y fontconfig daemonize
-
编辑文本/etc/profile,添加下面代码,按ctrl+x保存,y确定,然后直接回车。
sudo nano /etc/profile
SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}') if [ -z "$SYSTEMD_PID" ]; then sudo /usr/bin/daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}') fi if [ -n "$SYSTEMD_PID" ] && [ "$SYSTEMD_PID" != "1" ]; then exec sudo /usr/bin/nsenter -t $SYSTEMD_PID -a su - $LOGNAME fi
-
修改
/etc/sudoers
文件,加入如下内容:sudo nano /etc/sudoers
%sudo ALL=(ALL) NOPASSWD: /usr/sbin/daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target %sudo ALL=(ALL) NOPASSWD: /usr/bin/nsenter -t [0-9]* -a su - [a-zA-Z0-9]*
-
输入下面代码,执行脚本
source /etc/profile
-
重新打开ssh窗口
SSH连接时报 远程主机标识已更改 错误
找到提示中的目标文件,用记事本打开后删除目标地址主机的内容即可。