机械境

这里只是我的后花园,随性而写

原始问题,一言以蔽之就是在 daemon.json 增加 Host 之后,服务会启动失败。

解决方案:

  • /etc/systemd/system/docker.service.d/simple_dockerd.conf 中增加
    1
    2
    3
    [Service]
    ExecStart=
    ExecStart=/usr/bin/dockerd
  • /etc/docker/daemon.json 中增加
    1
    {"hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]}
  • 重启 docker 服务
    1
    2
    systemctl daemon-reload && 
    systemctl restart docker.service
  • 检查 docker 服务状态
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ❯ systemctl status docker.service
    ● docker.service - Docker Application Container Engine
    Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
    Drop-In: /etc/systemd/system/docker.service.d
    └─simple_dockerd.conf
    Active: active (running) since Wed 2023-02-15 11:49:01 CST; 1h 18min ago
    TriggeredBy: ● docker.socket
    Docs: https://docs.docker.com
    Main PID: 1193 (dockerd)
    Tasks: 350
    Memory: 198.1M
    CPU: 11.520s
    CGroup: /system.slice/docker.service
    ├─1193 /usr/bin/dockerd
  • 检查 TCP 连接
    1
    curl -X GET http://localhost:2375/containers/json?all=1

---EOF---

介绍

Fish 是一种用户友好的 Unix shell,它支持自动补全、语法高亮和其他功能,使得命令行操作变得更加容易。Fish 具有简单的语法,并且可以自动识别文件和目录名称,这使得它特别适合新手使用。Fish 还有一个强大的脚本语言,可以用来创建复杂的脚本和工具。Fish 也支持多种不同的主题和样式,可以根据用户的喜好进行自定义。

Fish 和 Bash 和 Zsh 对比,一言以蔽之就是开箱即用的高亮和自动不全,缺点就是和 POSIX 不兼容。Fish 有个骚操作就是执行 fish_config 后就可以在浏览器中配置。

Bash 中的特殊变量也挺难记的,Fish 中也都改成了单词:

1
2
3
4
5
6
7
$*, $@, $1 ...: $argv  # 函数或者脚本的参数
$0: status filename # 函数或者脚本的名字
$#: 使用 $argv 的长度
$?: $status # 上一个命令的返回值
$$: $fish_pid # shell 的 pid
$!: $last_pid # 上一个命令的 pid
$-: 大多数使用是 status is-interactive 和 status is-login

更多的差异,查看官方文档

安装

通过 brew install fish fisher starship 一键安装。

  • fisher: 作为 Fish 的包管理工具,就不需要每次都去修改 config.fish
  • Starship: Rust 编写的轻量、迅速、可无限定制的高颜值终端,类似 - powerlevel10k

配置

我安装的插件如下,可通过 fisher install meaningful-ooo/sponge 安装, fisher update 来进行更新。

1
2
3
4
5
6
7
8
9
10
❯ fisher list
jorgebucaran/fisher
patrickf1/fzf.fish
ankitsumitg/docker-fish-completions
jethrokuan/z
meaningful-ooo/sponge
jhillyerd/plugin-git
rstacruz/fish-asdf
jorgebucaran/replay.fish
nickeb96/puffer-fish

更多可参考 awsm.fish 进行安装。

其他基本上没什么需要配置的,如果需要的话,修改 ~/.config/fish/config.fish 文件即可。

主题

可通过 starship preset nerd-font-symbols > ~/.config/starship.toml 设置 symbols,更多设置,可参考官方文档,大部分时候都不需要。

最终只需要在 ~/.config/fish/config.fish 中添加一行 starship init fish | source 即可。

成果

之后只要在 iTerm2 中设置 fish 为启动 shell,显示效果如下:

从试用上来看,比 iTerm2+Zsh 的组合启动速度肉眼可见的迅速。但是由于不兼容 POSIX shell,暂时通过 replay.fish临时执行 Bash 脚本,后续还要看看是否有其他问题。

---EOF---

介绍

之前一直使用使用 antigen 管理 Zsh 配置,由于 antigen 已经很就不更新了,最后一次代码提交为 2019,就切换到了 sheldon

sheldon 是 Rust 编写的 Zsh 包管理器,特性如下:

  • Plugins from Git repositories.
    • Branch / tag / commit support.
    • Submodule support.
    • First class support for GitHub repositories.
    • First class support for Gists.
  • Arbitrary remote scripts or binary plugins.
  • Local plugins.
  • Inline plugins.
  • Highly configurable install methods using templates.
  • Shell agnostic, with sensible defaults for Zsh.
  • Super-fast plugin loading and parallel installation. See benchmarks.
  • Config file using TOML syntax.
  • Clean ~/.zshrc or ~/.bashrc (just add 1 line).

安装

通过 brew install sheldon 一键安装,也有其他安装方式可选。

配置

执行 sheldon init 会生成默认配置 plugins.toml,文件存放在 $XDG_CONFIG_HOME/sheldon,一般这个路径就是 ~/.config/sheldon/plugins.toml。可以直接编辑这个配置,也可以通过 sheldon CLI 来操作。

CLI

sheldon 有三种不同类型的命令:

  • init 初始化一个新的配置文件。
  • locksource 处理插件下载、安装和 shell 源代码的生成。
  • add,edit,remove 会自动更新配置文件

详细使用,可以参考官方说明,常用的就是 sheldon lock --update 更新所有插件。

配置结构

1
2
3
4
5
6
7
8
9
# ~/.config/sheldon/plugins.toml

# ┌─ Unique name for the plugin
# ┌──┴─┐
[plugins.base16]
github = "chriskempson/base16-shell"
# └─────┬────┘ └─────┬────┘
# │ └─ GitHub repository name
# └─ GitHub user or organization
Read more »

缘起

偶尔出差的时候,需要访问家里的网络,办公室已经有一台服务器使用了 Zerotier网络,索性就把家里的路由也加到网络里面,这样的话,就可以同时访问公司和家里的网络了。因为办公室那台是我控制的,所以不会出现其他同事会进入到家庭网络的情况。

ZeroTier 是一款软件定义网络(SDN)解决方案,可以帮助企业快速部署和管理全球虚拟网络。它使用一个分布式的虚拟交换机来连接所有的节点,无需物理交换机或配置复杂的 VPN。ZeroTier 可以在任何地方部署,包括云、数据中心、家庭和办公室。它还可以与其他 SDN 解决方案集成,如 OpenFlow 和 Cisco ACI。ZeroTier 还可以通过多个平台使用,包括 Windows、macOS、Linux、Android 和 iOS。

安装 Zerotier-one-moon

由于 Zerotier 的中转服务器都在国外,访问速度有可能会慢,所以增加一台中转服务器。 使用 zerotier-one-moon 可以快速一键部署自己的中转服务器。我这里就找了一台闲置的阿里云服务器,使用下来速度还可以,基本感受不到卡顿。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
version: "3.5"

services:
zerotier-moon:
image: ghcr.io/gythialy/zerotier-one-moon:latest
container_name: zerotier-moon
cap_add:
- NET_ADMIN
- SYS_ADMIN
devices:
- /dev/net/tun
ports:
- 9993:9993/udp
command:
- -4 xxx.xxx.xxx.xxx
- -p 9993
volumes:
- ./zerotier-one:/var/lib/zerotier-one

服务正常启动后,会得到 moon id,类似 61941d46d1,已经服务器的公网 IP 和端口,记得在防火墙把响应的端口打开。

配置 Zerotier 账号

账号本身没什么,就是注册登陆后建立一个 Zerotier 网络,这里建议设置成 private network,这样别人就不能随便加入了。

授权自己的接入点

因为设置成了 private network,所以默认是无法加入这个网络的,可以在 Zerotier 的网络管理界面看到哪些点,然后在 auth 上勾选一下,就授权了这个点接入了。

设置分配 IP 的网段

其实不设置根本没问题,你只要设置好路由表保证分配的网段范围都划分到同一个 LAN 就行。我这里设置成了 10.147.17.1~10.147.17.254,保证这个 IP 段不和你两端任意一段路由器的 LAN IP 段冲突就行。

路由设置

在 菜单 VPN/Zerotier 中填入刚才在网页上生成的 Network ID,保存并应用即可,正常情况下 Zerotier 的服务应该就启动起来了。

启动完成后,在 Zerotier 的网络管理界面授权通过,至此路由就应该连接到了 Zerotier 网络。

设置 Zerotier Moon

通过命令行 sudo zerotier-cli orbit 61941d46d1 61941d46d1 添加 Zerotier moon。可以通过 SSH 登录到路由器,或者通过 OpenWRT 提供的 TTYD 终端都可以,看个人习惯。

可以通过 sudo zerotier-cli peers 查看节点的连接情况

1
2
3
4
5
6
7
8
9
200 peers
<ztaddr> <ver> <role> <lat> <link> <lastTX> <lastRX> <path>
61941d46d1 1.6.5 MOON 10 DIRECT 307 306 139.224.186.142/9993
61d294b8cb - PLANET 168 DIRECT 2593 2431 50.8.73.34/9993
62f845ae71 - PLANET 321 DIRECT 2593 7327 50.8.252.138/9993
748cde7190 - PLANET 232 DIRECT 7640 2361 103.195.108.66/9993
952fcf1db7 - PLANET 247 DIRECT 1628481820060 2346 195.181.174.159/9993
a05acf0233 1.6.4 LEAF 205 DIRECT 2773 2773 34.135.35.67/46781
c8a68837ae - LEAF -1 RELAY

如果出现 <role> 为 MOON 的节点信息,则表示通过 moon 提速完成,上表中的 IP 和 Zerotier Id 都是随机的生成的。

设置 Zerotier 的路由表

在 Zerotier 的网络管理界面中添加路由表,我的路由表如下:

1
2
10.147.17.0/24 (LAN)
192.168.5.0/24 via 10.147.17.151

第一个表示 10.147.17.0/24 这是同一个局域网,分配出来的 IP 在这个范围的直连就行了,不用过别的网关了。

第二条表示,家庭的路由器后网段是 192.168.5.0/24,而 OpenWRT 在 Zerotier 网络得到的 IP 是 10.147.17.151(这个可以在 zerotier 网站查,也可以通过 ifconfig 命令在路由器查),那么 zerotier 局域网内的其他 IP 要访问这个 192.168.5.0/24 网段的话,自然要通过 10.147.17.151 作为网关。

如果有多个网络的话,增加多条路由表即可,不过 Zerotier 免费的版本,最多可以添加 25 个设备,如果超过这个设备的话,可以通过之间 PLANT 来解决。

后记

在 OpenWRT 上配置好 Zerotier 后,路由后的所有设备都可以直接访问 10.147.17.x 段的服务,无需做其他配置。在出差的时候,在本地启动 Zerotier 服务后,也可以直接访问家中的 192.168.5.x 的服务,比如 NAS 之类的。

---EOF---

  • 通过 lsblk 参考分区信息,我这边新加的分区为 /dev/sdb1,后面都以此为例
1
2
3
4
5
6
7
8
9
root@OpenWrt:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 316.5M 0 disk
├─sda1 8:1 0 16M 0 part /mnt/sda1
│ /boot
│ /boot
└─sda2 8:2 0 300M 0 part /rom
sdb 8:16 0 5G 0 disk
└─sdb1 8:17 0 5G 0 part /overlay
  • cfdisk 分区, 具体用法可以参考 cfdisk(8)
1
2
3
4
5
6
7
                                              Disk: /dev/sda
Size: 316.5 MiB, 331874304 bytes, 648192 sectors
Label: dos, identifier: 0x9e16c055

Device Boot Start End Sectors Size Id Type
/dev/sda1 * 512 33279 32768 16M 83 Linux
>> /dev/sda2 33792 1057791 1024000 500M 83 Linux

注:我这边已经分好区了,所以这里没现实,正常最下面绿色的 Free Space 就是待分区的部分

  • mkfs.ext4 /dev/sdb1: 创建文件系统

  • mount /dev/sdb1 /mnt/sdb1: 挂载格式化好的分区到 /mnt/sdb1 目录

  • cp -r /overlay/* /mnt/sdb1: 复制现有配置到新挂载的分区

  • 检查文件是否复制成功

1
2
3
4
5
6
7
root@OpenWrt:~# ls -al /mnt/sdb1
drwxr-xr-x 5 root root 4096 Oct 9 13:55 .
drwxr-xr-x 1 root root 4096 Oct 9 13:52 ..
lrwxrwxrwx 1 root root 1 Oct 9 2022 .fs_state -> 2
drwxr-xr-x 2 root root 4096 Oct 9 13:55 etc
drwxr-xr-x 10 root root 4096 Oct 9 13:52 upper
drwxr-xr-x 3 root root 4096 Oct 9 13:55 work
  • 系统/挂载点 菜单下配置挂载点

  • 重启系统后,可以在 系统/软件 下面查看剩余空间,正常情况下,就应该是新挂载分区的大小

在后续升级后,只要执行最后一步,重新挂载后就可以恢复原来的配置。

---EOF---

缘起

GitLab 官方提供的镜像,如果是单独部署服务的话,相对而言还是非常简单的,通过 Let’s Encrypt 自动获取 SSL 证书,其他的服务也可以运行在一个容器内,只要把数据库和文件存储放在宿主机中,然后挂载到容器内部即可。但是如果是在 GitLab 之前放置一个反向代理来实现 TLS 和负载均衡的话,默认的配置就不够了,需要额外的配置。

实现

  • 配置 gitlab.local.rb

    gitlab.local.rb
  • 编写 docker-compose.yml

    docker-compose.yml
  • 启动

    • 通过 Docker Compose 启动
      1
      docker-compose up -d
    • 通过 Docker Swarm 启动
      1
      2
      docker stack rm gitlab && \
      docker stack deploy --prune --with-registry-auth --resolve-image=always -c docker-compose.yaml gitlab

参考链接

  • NGINX settings
  • Omnibus gitlab-ce behind nginx reverse proxy – settings for Pages

---EOF---

步骤

  • STEP1: 编写 Dockerfile

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    FROM golang:1.16 AS build-env

    # Build Delve

    RUN go get github.com/go-delve/delve/cmd/dlv

    COPY . /app
    WORKDIR /app

    RUN go mod download

    EXPOSE 40000

    ENTRYPOINT ["dlv", "--listen=:40000", "--headless=true", "--api-version=2", "--accept-multiclient", "debug", "/app/cmd/"]

    注:这里是把代码全部复制到进行中,也可以只复制编译好的文件。如果是编译好的文件,编译的时候需要设置 -gcflags "all=-N -l"

  • STEP2: 编译 docker 镜像

    1
    docker build -f docker/Dockerfile.debug -t qlcchain/go-qlc:debug  .
Read more »

  1. 安装 CIFS Utils pkg
    1
    sudo apt-get install cifs-utils
  2. 创建一个挂载点
    1
    sudo mkdir /mnt/local_share
  3. 创建文件保存 ~/.smbcredentials 来保存 SMB 用户名和密码
    1
    2
    username=smb_share
    password=share_password
  4. /etc/fstab 最后添加配置实现自动挂载
    1
    2
    # /etc/fstab
    //$smb_server/share /mnt/local_share cifs credentials=/home/$user/.smbcredentials,uid=1000,gid=1000,iocharset=utf8 0 0

    注:$smb_server 为 SMB 服务器地址,$user 为当前用户名,uid/gid 为当前用户的 uidgid,可以通过 id $(whoami) 查看

---EOF---

0%