Netplan on Ubuntu is a network configuration tool introduced in Ubuntu 17.10 (Artful Aardvark) and widely used in subsequent versions. It simplifies network setup by allowing administrators to define network interfaces and their configurations in YAML files, which are then applied to the system using a backend renderer (such as systemd-networkd or NetworkManager).
Create docker-compose.yml
services:
gitlab:
image: gitlab/gitlab-ce:17.7.0-ce.0
container_name: roger-gitlab
restart: always
hostname: "gitlab.luojia.work"
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.luojia.work:8929'
gitlab_rails['gitlab_shell_ssh_port'] = 2424
ports:
- "8929:8929"
- "2424:22"
volumes:
- "./volumes/config:/etc/gitlab"
- "./volumes/logs:/var/log/gitlab"
- "./volumes/data:/var/opt/gitlab"
shm_size: "256m"
gitlab-runner:
image: gitlab/gitlab-runner:v17.7.0
container_name: roger-gitlab-runner
restart: always
depends_on:
- gitlab
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
- "./volumes/config/gitlab-runner:/etc/gitlab-runner"
- "./volumes/bin/docker:/usr/bin/docker"
command: ["run", "--user=root", "--working-directory=/home/gitlab-runner"]
privileged: true
Overview
MacBook Pro M1 on Monterey system, installed openssl with homebrew previously, but now because this system is old, homebrew can no longer be upgraded, and many software updates depend on it, so I need to install the latest version manually.
Solution
brew uninstall openssl
wget https://www.openssl.org/source/openssl-3.4.0.tar.gz
tar -xvf openssl-3.4.0.tar.gz
cd openssl-3.4.0
./Configure darwin64-arm64-cc
make
sudo make install MANDIR=/opt/homebrew/Cellar/openssl@3/3.4.0/share/man MANSUFFIX=ssl
sudo mkdir /opt/homebrew/Cellar/openssl@3/3.4.0/bin
sudo mv /usr/local/bin/openssl /opt/homebrew/Cellar/openssl@3/3.4.0/bin/openssl
ls -s /opt/homebrew/Cellar/openssl@3/3.4.0/bin/openssl /usr/local/bin/openssl
sudo mv /usr/local/share/doc /opt/homebrew/Cellar/openssl@3/3.4.0/share/doc
sudo mv /usr/local/include /opt/homebrew/Cellar/openssl@3/3.4.0/include
sudo mv /usr/local/lib /opt/homebrew/Cellar/openssl@3/3.4.0/lib
sudo mv /usr/local/ssl /opt/homebrew/Cellar/openssl@3/3.4.0/ssl
brew linke openssl@3
Commander
这是一个很受欢迎的命令行参数解析库。它可以帮助你轻松定义命令行指令和选项,比如定义一个简单的 “--version” 选项来展示脚本版本号,或者定义如 “init” 这样的命令用于初始化项目。
Inquirer
主要用于实现交互式命令行界面。当你需要用户输入一些信息,如用户名、密码或者从给定的选项中选择一个配置时,它非常有用。例如可以通过它让用户选择要安装的软件包版本。
Chalk
用于在命令行中给文本添加颜色和样式。可以让输出的信息更加醒目,例如把错误信息用红色字体显示,正确的操作提示用绿色字体显示,方便用户区分不同类型的消息。
概述
在编写 Typescript 应用时,经常需要在代码中引入多个模块或文件,这时候可能会遇到很长的路径名称。特别是相对路径,例如'../../../../some/very/deep/module',让人无法接受。
解决方案
使用路径别名(path aliases),将这些长路径映射成简短的别名,以方便在代码中进行引用,而且可以提高代码的可读性、可维护性和重用性。
而处理路径别名,已经有成熟的第三方库可用了,例如 tsconfig-paths、module-alias 等,不过更推荐 node 自带的 import mapping 方式解决,它同时支持 require 和 import 的导入方式,而无需按照第三方库。
gawk 编辑器
虽然 sed 编辑器非常方便,可以即时修改文本文件,但其自身也存在一些局限。你往往还需要一款更高级的文本文件处理工具,这种工具能够提供一个更贴近编程的环境,修改和重新组织文件中的数据。这正是 gawk 大展身手之地。
gawk 是 Unix 中最初的 awk 的 GNU 版本。gawk 比 sed 的流编辑提升了一个“段位”,它提供了一种编程语言,而不仅仅是编辑器命令。在 gawk 编程语言中,可以实现以下操作。
- 定义变量来保存数据。
- 使用算术和字符串运算符来处理数据。
- 使用结构化编程概念(比如 if-then 语句和循环)为数据处理添加处理逻辑。
- 提取文件中的数据将其重新排列组合,最后生成格式化报告。
正则表达式基础
理解正则表达式的第一步是弄清它到底是什么。
定义
正则表达式是一种可供 Linux 工具过滤文本的自定义模板。Linux 工具(比如 sed 或 gawk)会在读取数据时使用正则表达式对数据进行模式匹配。如果数据匹配模式,它就会被接受并进行处理。如果数据不匹配模式,它就会被弃用。
正则表达式模式使用元字符来描述数据流中的一个或多个字符。Linux 中有很多场景可以使用特殊字符来描述具体内容不确定的数据。
可以使用通配符*列出满足特定条件的文件。例如:
ls -al da*
# -rw-rw-r-- 1 roger roger 94 Jun 21 00:08 data12.txt
# -rw-rw-r-- 1 roger roger 180 Jun 19 22:37 data1.txt
# -rw-rw-r-- 1 roger roger 21 Jun 19 22:46 data3.txt
# -rw-rw-r-- 1 roger roger 79 Jun 20 22:33 data4.txt
# -rw-rw-r-- 1 roger roger 90 Jun 20 23:41 data6.txt
# -rw-rw-r-- 1 roger roger 217 Jun 20 23:20 data7.txt
sed 编辑器
sed 编辑器被称作流编辑器(stream editor),与普通的交互式文本编辑器截然不同。在交互式文本编辑器(比如 Vim)中,可以用键盘命令交互式地插入、删除或替换文本数据。流编辑器则是根据事先设计好的一组规则编辑数据流。
sed 编辑器根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么保存在命令文本文件中。sed 编辑器可以执行下列操作。
(1) 从输入中读取一行数据。
(2) 根据所提供的编辑器命令匹配数据。
(3) 按照命令修改数据流中的数据。
(4) 将新的数据输出到 STDOUT。
创建交互式 shell 脚本最常用的方法是使用菜单。各种菜单项有助于用户了解脚本能做什么以及不能做什么。
菜单式脚本通常会清空显示区域,然后显示可用的菜单项列表。用户可以按下与每个菜单项关联的字母或数字来选择相应的选项。
shell 脚本菜单的核心是 case 命令。case 命令会根据用户在菜单上的选择来执行相应的命令。
创建菜单布局
创建菜单的第一步显然是确定在菜单上显示的元素以及想要显示的布局方式。
clear 命令使用终端会话的终端设置信息来清除屏幕上的文本。运行 clear 命令之后,可以用 echo 命令来显示菜单。
bash shell 提供了 for 命令,以允许创建遍历一系列值的循环。每次迭代都使用其中一个值来执行已定义好的一组命令。for 命令的基本格式如下:
for var in list
do
commands
done