after Ubuntu 22.04 LTS
文章目录
- 1. 安装操作系统
- 2. 登录后
- 2.1 修改 root 用户密码
- 2.2 vim
- 2.3 OpenSSH
- 2.3 更新
- 2.3.1 选择软件源
- 2.3.2 更新
- 2.4 挂载硬盘
- 3. 必备软件安装
- 3.1 git
- 3.2 zsh 和 oh my zsh
- 3.3 其他软件
- 3.3.1 KDiff3
- 4. 常见问题
- 4.1 dhcp 更新 ip
- 4.2 Connecting to raw.githubusercontent.com failed
- 4.3 GnuTLS recv error (-110): The TLS connection was non-properly terminated
- 4.4 执行shell脚本可能遇到与预期不符的情况
- 4.5 合上笔记本盖子导致系统休眠
- 5. 环境搭建
- 5.1 编程语言
- 5.1.1 C/C++
- 5.1.2 Golang
- 5.1.3 Python
- 5.2 源码编译
- 5.2.1 OpenSSL
- 5.2.2 Nginx
- 5.2.3 RPC 环境
- 5.2.3.1 Golang 语言 protobuf + gRPC
- 5.2.3.1.1 protobuf
- 5.2.3.1.2 protocol 编译器的 Go 扩展
- 5.2.3.1.3 获取 grpc-go 代码
- 5.2.3.2 C 语言 protobuf + protobuf-c + protobuf-c-rpc
- 5.3 虚拟化环境
- 5.3.1 Docker
- 5.3.1.1 安装 Docker
- 5.3.1.2 在 Linux 上安装后的优化步骤
- 以非 root 用户身份管理 Docker
- 5.3.2 kvm
- 6. 配置
- 6.1 环境变量设置
1. 安装操作系统
Ubuntu 22.04 LTS
安装过程可参考 CentOS/RHEL:Linux就该这么学-第1章 动手部署一台Linux操作系统
2. 登录后
2.1 修改 root 用户密码
$ passwd root
测试用的虚拟机,我喜欢将密码改回123,以免忘记
2.2 vim
- 安装
- Ubuntu
$ apt install vim
如果报错:
正在等待缓存锁:无法获得锁 /var/lib/dpkg/lock-frontend。
可能是因为系统正在更新其他程序,等更新完。。。
- Ubuntu
- 配置
修改 vim 的配置文件 ~/.vimrc:set number syntax on set tabstop=4 set shiftwidth=4
2.3 OpenSSH
安装
$ apt install openssh-server $ systemctl start ssh
CentOS-7-x86_64-Minimal 好像已经包含 OpenSSH 了
配置
Port 22 PermitRootLogin yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication yes
Port
:设置 sshd 服务的监听端口PermitRootLogin
:允许 root 用户登录PasswordAuthentication
:使用账号密码方式登录
2.3 更新
2.3.1 选择软件源
清华源清华大学开源软件镜像站 - Ubuntu 镜像使用帮助
阿里源阿里云官方镜像站
中科大镜像说明
2.3.2 更新
- 更新本地数据库
$ apt update
- 更新所有已安装的包
$ apt upgrade
- 自动移除不需要的包
$ apt autoremove
2.4 挂载硬盘
Ubuntu挂载硬盘
3. 必备软件安装
3.1 git
安装
$ apt install git
用户设置
$ git config --global user.name "renz2048" $ git config --global user.email "191162792@qq.com"
创建 SSH Key
$ ssh-keygen -t rsa -C "191162792@qq.com"
也可以使用固定的 SSH key,将以及添加到 Github或者GitLab 的 SSH key拷贝到 ~/.ssh/目录下
3.2 zsh 和 oh my zsh
个人觉得 oh my zsh 很好用,因此放在必备软件中
安装过程参考:https://github.com/ohmyzsh/ohmyzsh#getting-started
查看内置的shell:
cat /etc/shells
,如果列表中没有 zsh,需要安装:$ apt install zsh
将 zsh 设置为系统默认 shell:
$ chsh -s /bin/zsh
退出用户并重新登录
查看是否修改成功:
echo $SHELL
,成功则显示/bin/zsh
安装 oh-my-zsh:
$ sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"# 或者也可以选择手动安装 $ git clone https://github.com/ohmyzsh/ohmyzsh.git ~/.oh-my-zsh $ cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc
插件安装
autojump:(本人未使用)
zsh-autosuggestions:键入命令时的历史命令建议
克隆仓库到 ~/.oh-my-zsh/custom/plugins$ git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
打开 ~/.zshrc 文件,将扩展名添加到 Oh My Zsh 的扩展列表(不要删除原有扩展项)
plugins=( [plugins...] zsh-autosuggestions)
zsh-syntax-highlighting:命令行语法高亮
克隆仓库到 ~/.oh-my-zsh/custom/plugins$ git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
打开 ~/.zshrc 文件,将扩展名添加到 Oh My Zsh 的扩展列表(不要删除原有扩展项)
plugins=( [plugins...] zsh-syntax-highlighting)
3.3 其他软件
$ apt install unzip automake libtool
3.3.1 KDiff3
代码合并工具
安装
ubuntu
$ apt install kdiff3
centos(推测,未实验过)
$ yum install kdiff3
配置
git config --global --add merge.tool kdiff3 git config --global --add mergetool.kdiff3.path "/usr/bin/diff3" git config --global --add mergetool.kdiff3.trustExitCode falsegit config --global --add diff.guitool kdiff3 git config --global --add difftool.kdiff3.path "/usr/bin/diff3" git config --global --add difftool.kdiff3.trustExitCode false
使用
# 将某个文件的当前版本和代码库中的版本做比较 git difftool main.c# 将某个文件的当前版本,和某个分支中这个文件的版本做比较 git difftool some-branch script.js# 将两个tag中的某个文件做比较 git difftool tag1..tag2 style.css# 比较两个分支 git difftool branch1 branch2
4. 常见问题
4.1 dhcp 更新 ip
如果使用 ip a
看到网卡状态为 up,并可以看到 mac 地址等信息,但是没有 ip 地址,可以使用下面命令从 DHCP 服务器重新获取:
$ dhclient ens33
4.2 Connecting to raw.githubusercontent.com failed
问题背景:
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 0.0.0.0, ::
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|0.0.0.0|:443... failed: Connection refused.
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|::|:443... failed: Connection refused.
据说是 github 的一些域名的 DNS 解析被污染,导致 DNS 解析过程无法通过域名取得正确的IP地址。
解决方法:
打开 https://www.ipaddress.com/ 输入访问不了的域名,查到 raw.githubusercontent.com
Q: What IP addresses does raw.githubusercontent.com resolve to?
A: raw.githubusercontent.com resolves to 4 IPv4 addresses and 4 IPv6 addresses:
- 185.199.108.133
- 185.199.109.133
- 185.199.110.133
- 185.199.111.133
- 2606:50c0:8000::154
- 2606:50c0:8001::154
- 2606:50c0:8002::154
- 2606:50c0:8003::154
根据查到的ip地址,在 /etc/hosts 文件添加一行:
185.199.108.133 raw.githubusercontent.com
4.3 GnuTLS recv error (-110): The TLS connection was non-properly terminated
问题背景:
fatal: unable to access 'https://github.com/ohmyzsh/ohmyzsh.git/': GnuTLS recv error (-110): The TLS connection was non-properly terminated.
/root
Error: git clone of oh-my-zsh repo failed
报错无法使用TLS,需要安装 apt-transport-https
解决方法:
看网上有很多教程教关闭 TLS 验证,emmm…
$ apt install apt-transport-https
4.4 执行shell脚本可能遇到与预期不符的情况
异常情况:
let: not found
- 大小判断失败
这些是由于 Ubuntu 默认使用 /bin/dash 解释器(阉割版 bash,例如不支持 let 和 i++ 功能)
禁止dash可以解决这个问题:
sudo dpkg-reconfigure dash
选择 no,禁用 dash
4.5 合上笔记本盖子导致系统休眠
编辑文件 /etc/systemd/logind.conf,设置 HandleLidSwitch
参数为 ignore,即:
HandleLidSwitch=ignore
5. 环境搭建
5.1 编程语言
5.1.1 C/C++
ubuntu
GNU 编译工具集 和 cgdb 调式工具
$ apt install build-essential cgdb
centos
Development Tools 包组包含 GCC 编译器以及编译软件涉及的其他库和实用程序:
$ yum group install "Development Tools"
安装 GNU/Linux 开发手册:
$ yum install man-pages
5.1.2 Golang
参考:Download and install
下载(省略)
安装
解压下载的归档文件到
/usr/local
。如果之前已经安装过,需要删除
/usr/local/go
中的文件$ rm -rf /usr/local/go && tar -C /usr/local -xzf go1.17.1.linux-amd64.tar.gz
添加
/usr/local/go/bin
到环境变量PATH
中:# 编辑 `~/.zshrc` 文件,可能可以设置 /etc/zshenv export PATH=$PATH:/usr/local/go/bin
执行
source ~/.zshrc
。验证
go version
。设置 go 代理(参考 Goproxy.cn)
$ echo "export GO111MODULE=on" >> ~/.zshrc $ echo "export GOPROXY=https://goproxy.cn" >> ~/.zshrc $ source ~/.zshrc
vscode
习惯于使用 vscode 的 remote系列插件,因此我的 Go 插件都安装在 vscode 服务端
$ go get -v golang.org/x/tools/gopls $ go get -v github.com/ramya-rao-a/go-outline $ go get -v golang.org/x/tools/cmd/goimports
后来发现这些都可以在 vscode 上点击 install all 全部安装。
5.1.3 Python
[TODO]
5.2 源码编译
准备工作目录
$ cd ~
$ mkdir work
$ cd work
5.2.1 OpenSSL
不同版本的 openssl 编译参数略有不同
下载源码
OpenSSL 1.1.1
$ git clone --branch OpenSSL_1_1_1-stable git@github.com:openssl/openssl.git $ cd openssl
OpenSSL 1.0.2
$ git clone --branch OpenSSL_1_0_2-stable git@github.com:openssl/openssl.git $ cd openssl
config 配置
OpenSSL 1.1.1
$ ./config \ --prefix=/usr/local \ --libdir=lib \ --openssldir=/usr/local/ssl \ -DOPENSSL_TLS_SECURITY_LEVEL=2 \ enable-ec_nistp_64_gcc_128 \ '-Wl,-rpath,$(LIBRPATH)' \ --debug
OpenSSL 1.0.2
$ ./config \ --prefix=/usr/local \ --openssldir=/usr/local/ssl \ enable-ec_nistp_64_gcc_128 \ '-Wl,-rpath,$(LIBRPATH)'
配置参数:
--prefix
安装目录,Unix 和 linux 下默认为/usr/local
。为避免与系统提供的版本冲突,也可以设置为/opt/openssl
--openssldir=/usr/local/ssl
OpenSSL 配置文件的目录,也作为默认证书和 key store 目录。默认值为/usr/local/ssl
no-shared
强制静态链接,并制作自包含的命令行工具如果没有使用这个参数,则将为 libcrypto 和 libssl 编译为动态库(一般命名为 libcrypto.so.1.1、libssl.so.1.1),使用命令行工具和库时需添加
LD_LIBRARY_PATH=/opt/openssl/lib
参数。libcrypto 库和 libssl 库作为两个经常被使用的库,编译成动态库更省空间,以后进行替换升级也比较放方便。
no-asm
不使用汇编代码,用于调式、查找问题的时候,生产环境建议不开启该选项。enable-ec_nistp_64_gcc_128
--debug
编译后的 OpenSSL 包含调试符号,零优化。(OpenSSL 1.0.2 没有这个选项,使用-g -O0
来禁止编译时优化)
编译
$ make && make install
环境变量配置
配置文件在 bash 中对应
/etc/profile
; 在 zsh 中对应~/.zshrc
:$ vim ~/.zshrc
添加内容如下:
## 动态库搜索路径:程序加载运行期间查找动态链接库 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib ## 静态库搜索路径:程序编译期间查找静态链接库时指定查找共享库的路径 export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/lib ## 执行程序搜索路径 # export PATH=$PATH:/usr/local/bin ## c 程序头文件搜索路径 export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/include ## c++ 程序头文件搜索路径 export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/include
保存后执行
$ source ~/.zshrc
man 手册
如果 prefix 配置在 man 手册默认找不到的位置,则需要修改 /etc/man_db.conf 文件,并添加一行:
MANDATORY_MANPATH /usr/local/ssl/share/man
使用 OpenSSL 头文件
由于安装目录的原因可能会出现找不到 OpenSSL 头文件的情况,可以通过在编译的时候指定头文件的位置来解决:
- 使用
C_INCLUDE_PATH
$ C_INCLUDE_PATH=/usr/local/ssl/include gcc -fPIC -o rpc_engine.o -c rpc_engine.c
- 使用
-I
$ gcc -fPIC -o rpc_engine.o -c rpc_engine.c -I/usr/local/ssl/include
- 使用
使用 OpenSSL 库
- 使用
-L
$ gcc -shared -o rpc_engine.so -lcrypto rpc_engine.o -L/opt/openssl/lib
- 使用
5.2.2 Nginx
[TODO]
5.2.3 RPC 环境
5.2.3.1 Golang 语言 protobuf + gRPC
5.2.3.1.1 protobuf
选择 protobuf 发布版本 下载 protoc-3.18.0-linux-x86_64.zip
解压:
$ unzip protoc-3.18.0-linux-x86_64.zip -d $HOME/.local
更新 PATH 环境变量:
$ export PATH="$PATH:$HOME/.local/bin"
验证 protoc --version
。
5.2.3.1.2 protocol 编译器的 Go 扩展
安装:
$ go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.26
$ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1
更新 PATH 环境变量:
$ export PATH="$PATH:$(go env GOPATH)/bin"
5.2.3.1.3 获取 grpc-go 代码
git clone git@github.com:grpc/grpc-go.git
运行 grpc-go/examples/helloworld 下的示例程序:
$ go run greeter_server/main.go# 在另一个终端运行 client
$ go run greeter_client/main.go
Greeting: Hello world
5.2.3.2 C 语言 protobuf + protobuf-c + protobuf-c-rpc
5.3 虚拟化环境
5.3.1 Docker
5.3.1.1 安装 Docker
卸载旧版本:
$ sudo apt remove docker docker-engine docker.io containerd runc
设置仓库
允许
apt
通过 HTTPS 访问软件库:$ sudo apt update $ sudo apt install \ca-certificates \curl \gnupg \lsb-release
添加 Docker 的官方 GPG 密钥:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
设置
apt
仓库:echo \"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
安装 Docker Engine
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io
运行 hello-world
镜像
$ sudo docker run hello-world
5.3.1.2 在 Linux 上安装后的优化步骤
以非 root 用户身份管理 Docker
创建 docker
组,并添加用户
创建
docker
组$ sudo groupadd docker
将用户添加到
docker
组$ sudo usermod -aG docker $USER
退出当前用户并重新登录,如果是在虚拟机环境,需要重启虚拟机。
设置 Docker 开机启动
$ sudo systemctl enable docker.service
$ sudo systemctl enable containerd.service
5.3.2 kvm
安装 kvm
$ sudo apt install qemu-kvm libvirt-daemon bridge-utils virtinst libvirt-daemon-system
安装虚拟机管理工具
$ sudo apt install virt-top libguestfs-tools libosinfo-bin qemu-system virt-manager
安装 vhost_net 模块
sudo modprobe vhost_net
查看安装模块是否启用:
$ renzheng@ubuntu22:~$ lsmod | grep vhost vhost_net 32768 0 vhost 53248 1 vhost_net vhost_iotlb 16384 1 vhost tap 24576 1 vhost_net
创建网桥
参考 Netplan configuration examples - Configuring network bridges
编辑 netplan 配置文件 /etc/netplan/01-network-manager-all.yaml 如下:
# Let NetworkManager manage all devices on this system
network:version: 2renderer: NetworkManagerethernets:enp0s31f6:dhcp4: nobridges:br0:dhcp4: yesinterfaces:- enp0s31f6
应用netplan修改:
$ sudo netplan apply
6. 配置
6.1 环境变量设置
- 如果使用 zsh,则可以在
~/.zshrc
、/etc/zshenv
中设置PATH
的值 - 如果使用 bash,则可以在
~/.profile
、/etc/profile.d/
下设置PATH
的值
after Ubuntu 22.04 LTS相关推荐
- Ubuntu 22.04 LTS apt-get update 报 Key is stored in legacy trusted.gpg keyring 警告解决方案
背景介绍 在 Ubuntu 22.04 LTS 下更新源 apt-get update 遇到了Key is stored in legacy trusted.gpg keyring (/etc/apt ...
- Ubuntu 22.04 LTS 是史诗级的版本?
导读 Canonical 最新的代号为"Jammy Jellyfish"的 Ubuntu LTS 版本,受到全球用户的好评.有数百个新的小功能和一些不太大众化的功能并没有引起太多关 ...
- Ubuntu 22.04 LTS 现在可供下载
现在可以从Ubuntu 网站下载Ubuntu 22.04 LTS. Ubuntu 22.04 进行了大量改进,包括新的水平工作区切换器和应用程序启动器.新的 UI 强调色.开箱即用的 RDP 支持和L ...
- 如何安装 Ubuntu 22.04 LTS 桌面版 ?
Canonical 在 2022年4月21日发布了期待已久的 Ubuntu 22.04 LTS 桌面操作系统.Ubuntu 22.04 的代号是 Jammy Jellyfish,它是一个 LTS (长 ...
- 为什么说 Ubuntu 22.04 LTS 是史诗级的版本
下面是 Ubuntu 22.04 LTS 的一些次要特性,这些特性使它成为迄今为止最好的 LTS 版本之一. Canonical 最新的代号为"Jammy Jellyfish"的 ...
- Ubuntu 22.04 LTS 中文桌面/服务器正式版发布 (内含 ISO 镜像下载)
公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 迫不及待地想尝试 Ubuntu 22.04 LTS?现在,它终于可以下载和升级了. 该版本在之前的 LTS 版本基 ...
- 双系统安装ubuntu 22.04 LTS(一步到位)
作为一个拥有两次都是一次成功安装好双系统的经验的人,我觉得我可以借这个文章仔细讲述一下,让大家都可以双系统安装都是一次成功.为什么有着两次安装经验呢,第一次安装完成后由于电脑的内存不太够了,然后重新装 ...
- ubuntu 22.04 lts 安装步骤(vmware)
ubuntu 22.04 lts 安装步骤(vmware) ubuntu 22.04 lts 安装步骤(vmware) 下载镜像 安装步骤 创建虚拟机 安装 ubuntu 22.04 lts 配置 u ...
- Ubuntu 22.04 LTS下安装1030 GPU 的驱动(图文详解)
文章目录 Ubuntu 22.04 LTS下安装1030 GPU 的驱动 法一:命令获取推荐驱动直接安装(简单有效) 1.检查你的操作系统,如下图: 2.查看是否有[GPU](https://so.c ...
- Ubuntu 22.04 LTS安装Modelsim SE 2020.4
前言 教程中的部分内容参考自易特创芯论坛,鉴于论坛相关资料有些零散.安装步骤繁琐或是存在错误.部分原理性问题未解释清楚人云亦云.导致为入门者带来了困难等原因,为此梳理出一篇相对完整的教程 准备工作 · ...
最新文章
- qt能使用logback_Spring boot使用logback实现日志配置
- MySQL必知必会教程:深入理解MySQL技术内幕
- Intel汇编语言程序设计学习-第二章 IA-32处理器体系结构-下
- 关键词 global 和 nonlocal
- mfc 消息消息队列概念_必看入门秘籍——解密原理:消息中间件之RabbitMQ
- Python的__getattribute__ vs __getattr__的妙用
- 有子对象的派生类的构造函数
- .NET 6新特性试用 | 隐式using指令
- 嫌学校 App 太“烂”,极客父母做了开源版本,却遭官方报警?
- 技术领导者携力为数据中心和其它市场带来开放的加速架构
- 【基础教程】基于matlab图像质量评价综述【含Matlab源码 075期】
- luoguP4709 信息传递 置换 + 多项式exp
- C++字符读入函数(getchgetchar)
- hysys动态模拟教程_学习记录-过程模拟实训-Aspen HYSYS教程
- CF卡镜像备份及恢复系统
- 服务器的垃圾清扫系统指令,怎么用dos命令系统清理垃圾
- class balanced loss pytorch 实现
- lodop打印html上下居中,lodop打印横向纵向
- 人工神经网络课后题答案,人工神经网络原理答案
- 7种常见的APPUI界面设计布局风格欣赏