0%

Mackup 是一个用于备份和同步应用配置(dotfiles)的工具,支持 iCloud、Dropbox 等云存储。
自 macOS Sonoma 起,Mackup 的旧的 link 教程很多都不再适用,因此非常有必要重新梳理一套“安全且可用”的最佳实践。

本文基于最新 macOS 行为,整理了一套 仅同步 CLI 工具(如 Codex)的最佳方案,同时避免同步 GUI 应用偏好造成的问题。

Mackup 是什么?

Mackup 可以将应用配置文件同步到云盘,在多台电脑之间保持统一环境。
尤其适合 CLI 工具,例如:

禁用VIM的鼠标模式

VIM 是一个功能强大的文本编辑器,但是在某些情况下,鼠标模式可能会导致问题。例如,当你在 VIM 中编辑/选择代码时,鼠标点击可能会导致光标跳转到错误的位置。

为了解决这个问题,你可以禁用 VIM 的鼠标模式。以下是详细步骤:

  1. 编辑 VIM 配置文件
    首先,需要编辑你的 VIM 配置文件 ~/.vimrc
  2. 添加配置
    ~/.vimrc 文件中添加以下配置:
    1
    2
    3
    4
    " 加载系统默认配置,确保基础功能正常
    source $VIMRUNTIME/defaults.vim
    " 禁用鼠标
    set mouse=
    这将禁用 VIM 的鼠标模式。

通过 HTTPS 端口使用 SSH

在某些网络环境中(奇怪的代理工具),22 端口可能被屏蔽,导致无法使用 SSH 进行 Git 推送。

这时,我们可以利用 SSH over HTTPS 的方法,通过 443 端口实现推送。以下是详细步骤:

  1. 编辑 SSH 配置文件
    首先,需要编辑你的 SSH 配置文件 ~/.ssh/config
    将以下配置加到该文件中:

    1
    2
    3
    4
    Host github.com
    Hostname ssh.github.com
    Port 443
    User git

    也可以使用以下命令一键添加

    1
    echo -e "Host github.com\n\tHostName ssh.github.com\n\tPort 443\n\tUser git" >> ~/.ssh/config

    这条命令将指定 GitHub 的主机名为 ssh.github.com, 并将端口设置为 443,用户为 git。

  2. 确保配置生效
    配置完成后,可以通过以下命令验证设置是否生效:

    1
    2
    3
    $ ssh -T git@github.com
    # Hi USERNAME! You've successfully authenticated, but GitHub does not
    # provide shell access.
  3. 使用 Git 推送
    现在,你可以正常使用 Git 命令进行推送。例如:

    1
    2
    3
    git add .
    git commit -m "Your commit message"
    git push origin main

    由于你已经将 SSH 流量封装在 HTTPS 中,推送操作应该能够顺利完成。

ImageMagick

ImageMagick是一个开源的图像处理工具集,能够在命令行下执行多种图像处理操作。以下是一些常见的ImageMagick用法,包括图像格式转换、压缩、裁剪等

安装ImageMagick

1
2
3
4
5
6
7
# Ubuntu
$ sudo apt-get update
$ sudo apt-get install imagemagick
# CentOS/RHEL
$ sudo yum install ImageMagick
# macOS
brew install imagemagick

用法

  • 转换为WebP

    1
    2
    3
    $ convert input.jpg output.webp
    # GIF动画需要增加-coalesce才能转换
    $ convert -coalesce input.gif output.webp
  • 有损转换为WebP

    1
    2
    3
    # 压缩率80
    $ convert -quality 80 input.jpg output.webp
    $ convert -quality 80 -coalesce input.gif output.webp
  • 有损转换为JPG

    1
    2
    # 压缩率80
    $ convert -quality 80 input.png output.jpg

IMG_6520

粗糙的小公猫,性格温和,随便撸

吃的特别多,是我家的 “没头脑”

1700675376837

漂亮的小母猫,性格高冷,不给撸

挑食又软便,是我家的 “不高兴”

  • 进入工作目录

    1
    2
    # 证书文件将生成到此文件夹中
    $ cd /etc/docker/cert
  • 运行生成脚本

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    # !/bin/bash

    # 一键生成TLS和CA证书
    # This script should be run via curl:
    # sh -c "$(curl -fsSL https://raw.githubusercontent.com/Sowevo/my_script/main/shell/auto-generate-docker-tls-ca.sh)"
    # sh -c "$(curl -fsSL https://ghproxy.com/https://raw.githubusercontent.com/Sowevo/my_script/main/shell/auto-generate-docker-tls-ca.sh)"
    # or via wget:
    # sh -c "$(wget -qO- https://raw.githubusercontent.com/Sowevo/my_script/main/shell/auto-generate-docker-tls-ca.sh)"
    # sh -c "$(wget -qO- https://ghproxy.com/https://raw.githubusercontent.com/Sowevo/my_script/main/shell/auto-generate-docker-tls-ca.sh)"
    # or via fetch:
    # sh -c "$(fetch -o - https://raw.githubusercontent.com/Sowevo/my_script/main/shell/auto-generate-docker-tls-ca.sh)"
    # sh -c "$(fetch -o - https://ghproxy.com/https://raw.githubusercontent.com/Sowevo/my_script/main/shell/auto-generate-docker-tls-ca.sh)"


    # 需要自己更改下以下配置
    # 服务器主机名
    SERVER="10.0.8.11"
    # 密码
    PASSWORD="Super#Geostar,5"
    # 国家
    COUNTRY="CN"
    # /etc/pki/tls/openssl.cnf,即 openssl 的配置文件路径并不一定适合所有系统
    # 可以使用 find 命令找出自己系统中 openssl.cnf 的位置:
    OPENSSL_CONF="/etc/pki/tls/openssl.cnf"
    # 省份
    STATE="北京市"
    # 城市
    CITY="北京市"
    # 机构名称
    ORGANIZATION="大白兔技术股份有限公司"
    # 机构单位
    ORGANIZATIONAL_UNIT="大白兔技术股份有限公司"
    # 邮箱
    EMAIL="x@sowevo.com"

    # 生成CA密钥
    openssl genrsa -aes256 -passout pass:$PASSWORD -out ca-key.pem 4096

    # 生成CA证书
    openssl req -utf8 -new -x509 -passin "pass:$PASSWORD" -days 3650 -key ca-key.pem -sha256 -out ca-cert.pem -subj "/C=$COUNTRY/ST=$STATE/L=$CITY/O=$ORGANIZATION/OU=$ORGANIZATIONAL_UNIT/CN=$SERVER/emailAddress=$EMAIL"

    # 生成服务端密钥
    openssl genrsa -out server-key.pem 4096

    # 生成服务端证书签名的请求文件
    openssl req -subj "/CN=$SERVER" -new -key server-key.pem -out server-req.csr -reqexts SAN -config <(cat $OPENSSL_CONF <(printf "\n[SAN]\nsubjectAltName=IP:$SERVER"))

    # 生成服务端证书
    openssl x509 -req -days 3650 -in server-req.csr -CA ca-cert.pem -CAkey ca-key.pem -passin "pass:$PASSWORD" -CAcreateserial -out server-cert.pem -extensions SAN -extfile <(cat $OPENSSL_CONF <(printf "[SAN]\nsubjectAltName=IP:$SERVER"))

    # 生成客户端密钥
    openssl genrsa -out client-key.pem 4096

    # 生成客户端证书签名的请求文件
    openssl req -subj '/CN=client' -new -key client-key.pem -out client-req.csr

    # 生成客户端证书
    sh -c 'echo "extendedKeyUsage=clientAuth" >> extfile.cnf'
    openssl x509 -req -days 3650 -in client-req.csr -CA ca-cert.pem -CAkey ca-key.pem -passin "pass:$PASSWORD" -CAcreateserial -out client-cert.pem -extfile extfile.cnf

    # 更改密钥权限
    chmod 0400 ca-key.pem server-key.pem client-key.pem
    # 更改证书权限
    chmod 0444 ca-cert.pem server-cert.pem client-cert.pem
  • 运行脚本后,检查下文件是否存在

    • ca-cert.pem
    • server-cert.pem
    • server-key.pem
  • 修改docker配置文件/usr/lib/systemd/system/docker.service

    在ExecStart属性后追加

    1
    --tlsverify --tlscacert=/etc/docker/cert/ca-cert.pem --tlscert=/etc/docker/cert/server-cert.pem --tlskey=/etc/docker/cert/server-key.pem -H tcp://0.0.0.0:2376 -H unix://var/run/docker.sock 
  • 重启docker

    1
    2
    $ systemctl daemon-reload
    $ systemctl restart docker

威联通申请证书

  • 首先通过qnapclub安装git命令

  • ssh连接威联通

  • sudo -i切换到admin(root)用户

  • 写一个重载脚本/share/Public/Script/acme/reloadcmd.sh,用于证书申请后重启服务

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # 建文件夹
    $ mkdir -p /share/Public/Script/acme/

    # 写入文件
    $ cat > /share/Public/Script/acme/reloadcmd.sh <<EOF
    #!/bin/sh
    /etc/init.d/Qthttpd.sh stop
    /etc/init.d/stunnel.sh stop
    cat /etc/stunnel/backup.cert \
    /etc/stunnel/backup.key > \
    /etc/stunnel/stunnel.pem
    /etc/init.d/stunnel.sh start
    /etc/init.d/Qthttpd.sh start
    EOF

    # 授权
    $ chmod -R 777 /share/Public/Script/acme/reloadcmd.sh
阅读全文 »

Git多用户配置

问题

在工作与生活中,我们难免会遇到同时使用多个Git账号的情况

  • 私人的项目在Github上托管,使用的user.name配置是Sowevo,使用的user.email是user@sowevo.com

  • 公司的项目在Gitlab上托管,使用的user.name配置是lisi,使用的user.email是lisi@gitlab.com

这时就会遇到这样的问题,提交到Gitlab的代码署名确是user@sowevo.com,经常用混

解决方案

按工程配置

git的配置可以放在三个地方:

  • /etc/gitconfig 系统配置,对所有用户有效,一般不用

  • ~/.gitconfig 用户配置,仅对当前用户生有效

    1
    2
    3
    # 全局配置
    $ git config --global user.name "Sowevo"
    $ git config --global user.email "user@sowevo.com"
  • projectPath/.git/config 项目配置,仅对当前项目生效

    1
    2
    3
    # 项目配置
    $ git config user.name "lisi"
    $ git config user.email "lisi@gitlab.com"

三种配置的优先级为 项目配置>用户配置>系统配置

此时可以利用项目配置优先的规则,对公司项目单独设置user.name与user.email,但是项目如果比较多的话,每一个都要设置,比较繁琐

可以使用下一种方式配置

阅读全文 »

使用Typora写笔记的时候经常需要贴个图

Typora支持自动上传图片到图床,需要搭配一些第三方的图床工具

这里选择了PicGo-Core

设置PicGo-Core

  • 安装PicGo-Core

    1
    2
    3
    4
    # 依赖node
    $ npm install picgo -g
    # or
    $ yarn global add picgo
  • 配置PicGo-Core

    我使用的是腾讯云COS,不同的图床配置不一样,具体参考文档

    1
    2
    3
    4
    # 设置图床
    $ picgo set uploader
    # 选择默认图床
    $ picgo use uploader
  • 测试上传

    1
    2
    3
    4
    5
    # 上传具体路径图片
    $ picgo upload /xxx/xxx.jpg

    # 上传剪贴板里的第一张图片(上传时会将格式转成png)
    $ picgo upload

设置Typora

Mac设置步骤

  • 获取node与picgo的绝对路径

    1
    2
    3
    4
    # 获取node的路径 我的是 /usr/local/bin/node
    $ which node
    # 获取picgo的路径 我的是 /usr/local/bin/picgo
    $ which picgo
  • 设置Typora的上传

    • 打开偏好设置–>图像
    • 插入图片时选择上传图片
    • 上传图片设定选择Custom Command
    • 命令填入[your node path] [your picgo-core path] upload,使用上一步获取的路径替换,例如我的是/usr/local/bin/node /usr/local/bin/picgo upload

    image-20210426162439566

Winsdows设置步骤

  • 设置Typora的上传

    • 打开偏好设置–>图像

    • 插入图片时选择上传图片

    • 上传图片设定选择Custom Command

    • 命令填入picgo upload

      image-20210428223155681