From 5ef0194709f9711229837433d9ced461cf2a9ce3 Mon Sep 17 00:00:00 2001 From: Anonymous <458892+aieu@users.noreply.github.com> Date: Tue, 26 Sep 2023 17:05:27 +0800 Subject: [PATCH] update post --- CNAME | 2 +- _data/blogroll.json | 8 - .../localizing-sublime-text-3.md | 0 .../nginx-redirect-http-request-to-https.md | 0 ...-ssl-security-for-apache-nginx-lighttpd.md | 0 _posts/2009-09-29-gentoo-installation.md | 2 - _posts/2010-12-13-openssh.md | 39 ++- _posts/2011-06-13-git-usage.md | 10 + _posts/2011-08-09-simple-method-for-mysql.md | 12 +- _posts/2011-08-18-how-to-use-sqlite.md | 2 +- _posts/2011-08-18-sqlite-command.md | 2 +- _posts/2011-09-08-php-sqlite-e-g.md | 2 +- _posts/2011-09-08-php-sqlite-function.md | 2 +- _posts/2012-07-18-gnupg-usage.md | 98 ++++++-- _posts/2013-12-01-try-freebsd-again.md | 2 +- _posts/2014-03-28-find-depend-on-gentoo.md | 40 +-- _posts/2014-05-13-gentoo-reinstall.md | 5 +- ...4-copy-backup-and-mirror-image-on-linux.md | 31 +-- _posts/2014-12-31-centos-7-records.md | 184 +++++--------- _posts/2015-12-25-efi-boot-stub-for-gentoo.md | 17 +- _posts/2015-12-26-bsod-on-boot-0xc0000034.md | 2 +- _posts/2018-01-20-recover-gcc-on-gentoo.md | 10 +- _posts/2020-06-12-zeropi-record.md | 115 +++++---- ...20-committing-changes-to-a-pull-request.md | 48 ++++ _posts/2021-05-25-gentoo-on-wsl2.md | 123 +++++++++ _posts/2021-06-22-migration-to-25519.md | 234 ++++++++++++++++++ _posts/2022-03-08-perfer-ipv4.md | 58 +++++ ...3-02-18-enable-promiscuous-mode-on-nics.md | 66 +++++ _posts/2023-02-22-ipv6-privacy-extensions.md | 82 ++++++ about.md | 10 +- 30 files changed, 908 insertions(+), 298 deletions(-) rename _posts/2014-08-09-localizing-sublime-text-3.md => _drafts/localizing-sublime-text-3.md (100%) rename _posts/2015-08-21-nginx-redirect-http-request-to-https.md => _drafts/nginx-redirect-http-request-to-https.md (100%) rename _posts/2015-06-10-strong-ssl-security-for-apache-nginx-lighttpd.md => _drafts/strong-ssl-security-for-apache-nginx-lighttpd.md (100%) create mode 100644 _posts/2020-09-20-committing-changes-to-a-pull-request.md create mode 100644 _posts/2021-05-25-gentoo-on-wsl2.md create mode 100644 _posts/2021-06-22-migration-to-25519.md create mode 100644 _posts/2022-03-08-perfer-ipv4.md create mode 100644 _posts/2023-02-18-enable-promiscuous-mode-on-nics.md create mode 100644 _posts/2023-02-22-ipv6-privacy-extensions.md diff --git a/CNAME b/CNAME index bf8033263..e302e78ce 100644 --- a/CNAME +++ b/CNAME @@ -1 +1 @@ -havee.me \ No newline at end of file +havee.me diff --git a/_data/blogroll.json b/_data/blogroll.json index fdd49e86c..21bdc05f7 100644 --- a/_data/blogroll.json +++ b/_data/blogroll.json @@ -1,16 +1,8 @@ [ - { - "title": "刘静的博客", - "url": "//upliu.net" - }, { "title": "小天地,大世界", "url": "//www.lyblog.net" }, - { - "title": "woodelf@Gentoo", - "url": "//blog.woodelf.org" - }, { "title": "华米兹之家", "url": "//zhaoyuxiang.cn" diff --git a/_posts/2014-08-09-localizing-sublime-text-3.md b/_drafts/localizing-sublime-text-3.md similarity index 100% rename from _posts/2014-08-09-localizing-sublime-text-3.md rename to _drafts/localizing-sublime-text-3.md diff --git a/_posts/2015-08-21-nginx-redirect-http-request-to-https.md b/_drafts/nginx-redirect-http-request-to-https.md similarity index 100% rename from _posts/2015-08-21-nginx-redirect-http-request-to-https.md rename to _drafts/nginx-redirect-http-request-to-https.md diff --git a/_posts/2015-06-10-strong-ssl-security-for-apache-nginx-lighttpd.md b/_drafts/strong-ssl-security-for-apache-nginx-lighttpd.md similarity index 100% rename from _posts/2015-06-10-strong-ssl-security-for-apache-nginx-lighttpd.md rename to _drafts/strong-ssl-security-for-apache-nginx-lighttpd.md diff --git a/_posts/2009-09-29-gentoo-installation.md b/_posts/2009-09-29-gentoo-installation.md index 837f987b0..9a76735a8 100644 --- a/_posts/2009-09-29-gentoo-installation.md +++ b/_posts/2009-09-29-gentoo-installation.md @@ -112,9 +112,7 @@ OK,准备工作完成。 en_US ISO-8859-1 en_US.UTF-8 UTF-8425 zh_CN.GB18030 GB18030 - zh_CN.GBK GBK zh_CN.UTF-8 UTF-8 - zh_CN GB2312 更新环境 diff --git a/_posts/2010-12-13-openssh.md b/_posts/2010-12-13-openssh.md index 3c2fc6c9c..be8df3920 100644 --- a/_posts/2010-12-13-openssh.md +++ b/_posts/2010-12-13-openssh.md @@ -36,24 +36,41 @@ tags: [Openssh, Usage] #### 创建密钥对 +推荐 ed25519,已在 OpenSSH 6.5 中加入支持 + + ssh-keygen -t ed25519 -C "First.Last@somewhere.com" ssh-keygen -t rsa -b 4096 -C "First.Last@somewhere.com" - # 或 ssh-keygen -t ecdsa -b 521 -C "First.Last@somewhere.com" - # 验证公钥指纹 - ssh-keygen -E md5 -lf ~/.ssh/id_rsa.pub - # 从私钥创建公钥 - ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub - # 修改私钥口令 - ssh-keygen -p -f ~/.ssh/id_dsa + + +验证公钥指纹 + + ssh-keygen -E md5 -lf ~/.ssh/your_pubkey + +从私钥创建公钥 + + ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/your_pubkey + +修改私钥口令 + + ssh-keygen -p -f ~/.ssh/your_pubkey #### 重新生成服务器密钥 rm -v /etc/ssh/ssh_host_* + ssh-keygen -A + systemctl restart ssh + +或者手动生成各自需要的服务器密钥 + + ssh-keygen -q -N "" -t ed25519 -f /etc/ssh/ssh_host_ed25519_key ssh-keygen -q -N "" -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key ssh-keygen -q -N "" -t ecdsa -b 521 -f /etc/ssh/ssh_host_ecdsa_key - ssh-keygen -q -N "" -t dsa -b 1024 -f /etc/ssh/ssh_host_dsa_key + ssh-keygen -q -N "" -t dsa -f /etc/ssh/ssh_host_dsa_key systemctl restart ssh - # debian 用户可以用如下方式 + +debian 用户可以用如下方式 + rm -v /etc/ssh/ssh_host_* dpkg-reconfigure openssh-server # debian systemctl restart ssh @@ -68,7 +85,7 @@ tags: [Openssh, Usage] Host hostname IdentityFile ~/.ssh/your-private-key - HostName ip + HostName ip or domain Port port User username @@ -126,8 +143,6 @@ ssh-agent 一般人用不到,不过还是挺有用的,概念不介绍了。 Protocol 2 Compression yes -好了,当你 `ssh host1` 之后,可以登陆同样公钥的第三台机器了。 - #### ProxyCommand 不过,并不是所有的机子的公钥是一致的,但是有不得不使用其中一台作为跳板,那么我们就使用这个参数了 diff --git a/_posts/2011-06-13-git-usage.md b/_posts/2011-06-13-git-usage.md index fb08658cf..ab3c688bb 100644 --- a/_posts/2011-06-13-git-usage.md +++ b/_posts/2011-06-13-git-usage.md @@ -186,6 +186,16 @@ github 回滚 $ git gc --prune=0 $ git reflog expire --expire-unreachable=0 --all +获取最近 10 个 commit 历史 + + $ git clone --depth 10 https://github.com/user/repo.git + +在本地已有项目上保留 10 个历史记录 + + $ git fetch origin --depth 10 + # 如有冲突,则 + $ git reset --merge refs/remotes/origin/master + #### commit 历史操作 永久删除历史文件 diff --git a/_posts/2011-08-09-simple-method-for-mysql.md b/_posts/2011-08-09-simple-method-for-mysql.md index b677c8212..ba7dec70e 100644 --- a/_posts/2011-08-09-simple-method-for-mysql.md +++ b/_posts/2011-08-09-simple-method-for-mysql.md @@ -1,7 +1,7 @@ --- layout: post title: "MySQL 简单操作 (笔记)" -category: SQL +category: Other tags: [MySQL, CLI] --- @@ -244,23 +244,23 @@ or 备份molyx到文件molyx.sql - mysqldump -uroot -p molyx > /your/path/molyx.sql + mysqldump -uusername -ppassword molyx > /your/path/molyx.sql 备份全部数据 - mysqldump -uroot -p --all-databases > /your/path/backup.sql + mysqldump -uroot -ppassword --all-databases > /your/path/backup.sql 备份molyx并压缩 - mysqldump -u root -p molyx | gzip > /your/path/molyx.sql.gz + mysqldump -uusername -ppassword molyx | gzip > /your/path/molyx.sql.gz 将molyx.sql导入到数据库 - mysqlimport -uroot -p < /your/path/molyx.sql + mysql -uusername -ppassword molyx < /your/path/molyx.sql 将压缩文件molyx.sql.gz中数据恢复到molyx库 - gzip < molyx.sql.gz | mysql -uroot -p --database molyx + gzip < molyx.sql.gz | mysql -uusername -ppassword molyx 将文本数据导入数据库: diff --git a/_posts/2011-08-18-how-to-use-sqlite.md b/_posts/2011-08-18-how-to-use-sqlite.md index a3a39d834..d0e61051c 100644 --- a/_posts/2011-08-18-how-to-use-sqlite.md +++ b/_posts/2011-08-18-how-to-use-sqlite.md @@ -1,7 +1,7 @@ --- layout: post title: "SQLite 命令行程序说明" -category: SQL +category: Other tags: [SQLite, CLI, Usage] --- diff --git a/_posts/2011-08-18-sqlite-command.md b/_posts/2011-08-18-sqlite-command.md index 11f922041..79811064d 100644 --- a/_posts/2011-08-18-sqlite-command.md +++ b/_posts/2011-08-18-sqlite-command.md @@ -1,7 +1,7 @@ --- layout: post title: "SQLite 命令" -category: SQL +category: Other tags: [SQLite, CLI, Usage] --- diff --git a/_posts/2011-09-08-php-sqlite-e-g.md b/_posts/2011-09-08-php-sqlite-e-g.md index d0472d424..cbcd7c3c0 100644 --- a/_posts/2011-09-08-php-sqlite-e-g.md +++ b/_posts/2011-09-08-php-sqlite-e-g.md @@ -1,7 +1,7 @@ --- layout: post title: "PHP SQLite 示例" -category: SQL +category: Other tags: [PHP, SQLite, Usage] --- diff --git a/_posts/2011-09-08-php-sqlite-function.md b/_posts/2011-09-08-php-sqlite-function.md index b166f364f..6b2cec130 100644 --- a/_posts/2011-09-08-php-sqlite-function.md +++ b/_posts/2011-09-08-php-sqlite-function.md @@ -1,7 +1,7 @@ --- layout: post title: "PHP SQLite 函数库" -category: SQL +category: Other tags: [PHP, SQLite, Function] --- diff --git a/_posts/2012-07-18-gnupg-usage.md b/_posts/2012-07-18-gnupg-usage.md index 1cf7f8ba6..200ce198e 100644 --- a/_posts/2012-07-18-gnupg-usage.md +++ b/_posts/2012-07-18-gnupg-usage.md @@ -21,7 +21,7 @@ GnuPG 是实现安全通信和数据存储的一系列工具集,可以做加 6. 支持多种加密算法 7. 支持扩展模块 8. 用户标识遵循标准结构 -9. 多语言支持(尚未支持中文) +9. 多语言支持 10. 支持匿名信息接收 11. 支持HKP密钥服务 @@ -34,7 +34,7 @@ GnuPG 是实现安全通信和数据存储的一系列工具集,可以做加 - \[A\]: 用于身份认证 - \[C\]: 主密钥特有,用于认证子密钥 -密钥算法,其中 ECC 算法,需要在生成密钥对命令时添加参数 --expert,顾名思义,专家模式 +密钥算法 - RSA - ElGamal @@ -44,6 +44,8 @@ GnuPG 是实现安全通信和数据存储的一系列工具集,可以做加 - EdDSA - ... +ECC 算法,在版本 2.1.0 ,支持 ed25519 数字签名,在版本 2.1.7 ,支持 curve25519 加密,需要在操作时时添加参数 `--expert`,顾名思义,专家模式 + #### 二、命令 ##### 创建主密钥对 @@ -79,17 +81,17 @@ GnuPG 是实现安全通信和数据存储的一系列工具集,可以做加 ##### 私钥处理 $ gpg --armor --output filename.asc --export-secret-keys KEY_ID # 导出 ID 的主私钥,不加用户标志,则导出所有主私钥 - $ gpg --armor --output filename.asc --export-secret-subkeys SUBKEY_ID # 导出 sub ID 的子密钥私钥 + $ gpg --armor --output filename.asc --export-secret-subkeys SUBKEY_ID! # 导出 sub ID 的子密钥私钥 $ gpg --list-secret-keys|-K # 显示所有私钥 ##### 其他 - $ gpg --import Havee.asc # 导入私钥或公钥 + $ gpg --import filename.asc # 导入私钥或公钥 $ gpg --delete-secret-and-public-key KEY_ID # 删除私钥和公钥 $ gpg --delete-secret-key KEY_ID # 删除私钥 $ gpg --delete-key KEY_ID # 删除公钥 - $ gpg --edit-key Havee # 编辑密钥,要帮助输入 help + $ gpg --edit-key KEY_ID # 编辑密钥,要帮助输入 help gpg> help quit 退出此菜单 save 保存并退出 @@ -140,38 +142,86 @@ GnuPG 是实现安全通信和数据存储的一系列工具集,可以做加 ##### 加密与解密 - $ gpg -e -r Havee.asc filename # 使用 Havee 的公钥文件对 filename 加密,生成二进制 filename.pgp - $ gpg -ea -r Havee filename -o filename.asc # 同上,不过以 ASCII 方式输入结果,并输出 asc 文件 - $ gpg -d filename.pgp -o filename # 对 filename.pgp 解密,保存为 filename + $ gpg -r filename.asc -e filename # 使用公钥文件对 filename 加密,生成二进制 filename.pgp + $ gpg -r KEY_ID -o filename.asc -ea filename # 同上,不过以 ASCII 方式输入结果,并输出 asc 文件 + $ gpg -o filename -d filename.pgp # 对 filename.pgp 解密,保存为 filename ##### 打包方式进行签名与验证 - $ gpg -s filename # 使用默认的用户对 filename 进行打包方式的签名 - $ gpg -u Havee -s filename -o filename.sig # 使用指定的用户 Havee 对 filename 进行签名 - $ gpg --verify filename.gpg # 验证签名 - $ gpg -d filename.gpg -o filename # 解包并验证签名 + $ gpg -s filename # 使用默认的用户对 filename 进行打包方式的签名 + $ gpg -u KEY_ID -s filename # 使用指定的用户 KEY_ID 对 filename 进行签名 + $ gpg --verify filename.gpg # 验证签名 + $ gpg -o filename -d filename.gpg # 解包并验证签名 ##### 分离方式进行签名与验证 $ gpg -sb filename - $ gpg -u Havee -sb filename - $ gpg -u Havee -o filename.sig -sb filename - $ gpg --verify filename.gpg filename + $ gpg -u KEY_ID -sb filename + $ gpg --verify filename.sig filename ##### 签名并加密 - $ gpg -es -r Havee -u Havee -o filename.gpg filename # 使用 Havee 的公钥进行加密,并使用 Havee 的私钥进行签名,生成的二进制文件是 filename.gpg - $ gpg -esa -r Havee -u Havee -o filename.asc filename # 同上,加上以 ASCII 编码 + $ gpg -r KEY_ID -es filename # 使用指定的公钥进行加密并签名,生成的二进制文件是 filename.gpg + $ gpg -r KEY_ID -o filename.asc -esa filename # 同上,加上以 ASCII 编码 -##### mutt 中的使用 +###### 签名加密时常用参数 + + -s, --sign # 签名 + -b, --detach-sign # 分离式签名,文件与签名分开 + -e, --encrypt # 加密 + -d, --decrypt # 解密 + -a, --armor # ascii 编码输出,一般与 -o file 搭配 + -o, --output FILE # 输出文件 + -r, --recipient USER-ID # 以特定的 ID 去加密 + -u, --local-user USER-ID # 以特定的 ID 去签名或解密 + +##### 作为 ssh 公钥 + +如果想将 gpg 作为 ssh 公钥,则在创建子钥的时候,需要创建一个 [A] 用途的专用子钥。 + +编辑 **~/.gnupg/gpg-agent.conf**,加入 + + enable-ssh-support + +编辑你的 **~/.bashrc** 或 **~/.zshrc**,加入如下,并最后重新载入下 **source ~/.bashrc** 或 **source ~/.zshrc**,原本写入 ssh-agent 相关的内容,也可以注释掉了 + + [[ -f /usr/bin/gpg-agent ]] && export GPG_TTY=$(tty) + [[ -n "$SSH_CONNECTION" ]] && export PINENTRY_USER_DATA="USE_CURSES=1" + unset SSH_AGENT_PID + if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then + export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket) + fi + +编辑 **~/.ssh/config**,加入 + + Match host * exec "gpg-connect-agent updatestartuptty /bye > /dev/null" + +获取子钥的 keygrip -编辑 `~/.gnupg/gpg.conf`,注销下面两行 + $ gpg --with-keygrip --list-key KEY_ID - ... - keyserver hkp://keys.gnupg.net - ... - keyserver-options auto-key-retrieve - ... +将对应子匙的 keygrip 插入到 **~/.gnupg/sshcontrol** 中 + + $ echo xxxxxxyour-keygripxxxxxx >> ~/.gnupg/sshcontrol + +重启下 gpg-agent + + $ gpg-connect-agent reloadagent /bye + +接下来就可以检查下,ssh 验证列表中,是否存在公钥了 + + $ ssh-add -l + +最后将上面的公钥添加到你的远程服务器,或 github 的 gpg 列表中即可 + +###### 针对 github + +如果有多个项目处于 github 的不同账户中,你可能需要针对不同项目配置不同的密钥 + + gpg --export-ssh-key subkey! > .ssh/repo-1 + git config --local core.sshCommand "ssh -i ~/.ssh/repo-1" # 项目文件夹内执行 + +##### mutt 中的使用 复制 mutt 示例配置文件至 mutt 配置目录 diff --git a/_posts/2013-12-01-try-freebsd-again.md b/_posts/2013-12-01-try-freebsd-again.md index f748d1f7b..a7c470948 100644 --- a/_posts/2013-12-01-try-freebsd-again.md +++ b/_posts/2013-12-01-try-freebsd-again.md @@ -1,7 +1,7 @@ --- layout: post title: "再次尝试 FreeBSD" -category: "BSD" +category: "Other" tags: [freebsd] --- diff --git a/_posts/2014-03-28-find-depend-on-gentoo.md b/_posts/2014-03-28-find-depend-on-gentoo.md index 75d8613cb..b45d21222 100644 --- a/_posts/2014-03-28-find-depend-on-gentoo.md +++ b/_posts/2014-03-28-find-depend-on-gentoo.md @@ -5,43 +5,11 @@ category: Linux tags: [Gentoo, Packager] --- -看到 Maxthon 发布了 Linux 版本,Gentoo 同学速度很快,ebuild 已经提交到 Gentoo-zh 中,不过为了验证依赖是否全部满足,临时写了个脚本去验证。 +- 通过objdump去获取库信息,过滤 +- 再通过 `equery b file` 连网查询,获取软件包名 -几步走: - -1. 下载二进制包,解压 -2. `ldd file`,确定需要的库文件 -3. 取第一结果,排序,去除重复数据 -4. `equery b name.so` 去网络上获取软件包名 - - - -很简单,当然 `equery b name.so` 是在线查询,有时网络环境不好的时候,需要耗费些时间很长,甚至返回空的查询结果。 +以 `/bin/cp` 为例 ```shell -#! /usr/bin/env sh -# -# depend.sh -# -# Depends on app-portage/pfl -# -# use it on Gentoo - -exefile=$1 -tmpfile="/tmp/${exefile}.so.show" - -[[ -f ${tmpfile} ]] && rm -rf ${tmpfile} - -for so in $(ldd ${exefile} | awk '{print $1}' | sort | uniq ); do - [[ ! -f $so ]] && echo $so >> /tmp/${exefile}.so -done - -for so in $(cat /tmp/${exefile}.so); do - echo "$so need:" - equery b $so - echo "" -done >> ${tmpfile} - -rm /tmp/${exefile}.so -cat ${tmpfile} +objdump -p /bin/cp | grep NEEDED | awk '{print $2}' | xargs equery b | sort | uniq ``` diff --git a/_posts/2014-05-13-gentoo-reinstall.md b/_posts/2014-05-13-gentoo-reinstall.md index fc32aaa69..5141bb852 100644 --- a/_posts/2014-05-13-gentoo-reinstall.md +++ b/_posts/2014-05-13-gentoo-reinstall.md @@ -21,7 +21,9 @@ liveusb 点亮机子,下载最新的 stage 与 portage 后,各种 mount 后 mount /dev/sda2 /mnt/gentoo mount -t proc proc /mnt/gentoo/proc mount --rbind /sys /mnt/gentoo/sys + mount --make-rslave /mnt/gentoo/sys mount --rbind /dev /mnt/gentoo/dev + mount --make-rslave /mnt/gentoo/dev chroot /mnt/gentoo /bin/bash env-update && . /etc/profile emerge --sync @@ -40,9 +42,6 @@ liveusb 点亮机子,下载最新的 stage 与 portage 后,各种 mount 后 nano -w /etc/fstab nano -w /etc/hosts passwd root - emerge syslog-ng - rc-update add syslog-ng default - emerge mlocate emerge dhcpcd 然后安装 syslinux diff --git a/_posts/2014-12-14-copy-backup-and-mirror-image-on-linux.md b/_posts/2014-12-14-copy-backup-and-mirror-image-on-linux.md index e4156460f..2838f1489 100644 --- a/_posts/2014-12-14-copy-backup-and-mirror-image-on-linux.md +++ b/_posts/2014-12-14-copy-backup-and-mirror-image-on-linux.md @@ -96,21 +96,22 @@ tags: [CLI] - -i: input 模式,还原备份档 - -o: output 模式,建立备份档 - -p: Pass-through 模式,直接将文件复制到目的目录 - - -t: 查看档案文件,仅使用在 i 模式下 - - -c: 使用旧的 POSIX portable 方式存储,o 模式专用 - - -v: 将存取过程打印到屏幕上 - - -d: 自动建立目录,i & p 模式专用 - - -A: 追加文件到备份档,o 模式专用 - - -B: 存取块大小设置成 5120 byte,o 模式专用 - - -C: 存取块大小,单位是 byte,O 模式专用 - - -L: 若存在软链接档案,则链接档案的属性,而非链接本身,o & p 模式专用 - - -m: 创建文件时,保留以前文件的修改时间,i & p 模式专用 - - -u: 置换所有文件,不论日期时间的新旧与否,皆不予询问而直接覆盖 +- -t: 查看档案文件,仅使用在 i 模式下 +- -a: 重新设置文件的存取时间 +- -c: 使用旧的 POSIX portable 方式存储,o 模式专用 +- -d: 自动建立目录,i & p 模式专用 +- -m: 创建文件时,保留以前文件的修改时间,i & p 模式专用 +- -u: 置换所有文件,不论日期时间的新旧与否,皆不予询问而直接覆盖 +- -v: 将存取过程打印到屏幕上 +- -A: 追加文件到备份档,o 模式专用 +- -B: 存取块大小设置成 5120 byte,o 模式专用 +- -C: 存取块大小,单位是 byte,O 模式专用 +- -L: 若存在软链接档案,则链接档案的属性,而非链接本身,o & p 模式专用 常见的使用场景 - find /path/to/dir | cpio -ocvB > /path/to/name.cpio # o 模式,打包目录成 cpio 档案 - find /. | cpio -ocvB > /path/to/system.cpio # o 模式,备份整个系统 - cpio -ivt < /path/to/name.cpio # i 模式,列出 name.cpio 的文件 - cpio -idmv < /path/to/name.cpio # i 模式,还原 cpio 档案 - find /path/to/dir1 | cpio -pvd > /path/to/dir2 # p 模式,直接复制文件到新目录 + find /path/to/dir -print0 | cpio --null -oacvB > /path/to/name.cpio # o 模式,打包目录成 cpio 档案 + find /. | cpio -oacvB > /path/to/system.cpio # o 模式,备份整个系统 + cpio -ivt < /path/to/name.cpio # i 模式,列出 name.cpio 的文件 + cpio -idmuv < /path/to/name.cpio # i 模式,还原 cpio 档案 + find /path/to/dir -print0 | cpio --null -pvd /path/to/dir1 # p 模式,直接复制文件到新目录 diff --git a/_posts/2014-12-31-centos-7-records.md b/_posts/2014-12-31-centos-7-records.md index 5749e5bbc..ac24f9cb0 100644 --- a/_posts/2014-12-31-centos-7-records.md +++ b/_posts/2014-12-31-centos-7-records.md @@ -184,9 +184,8 @@ tags: [Nginx, PHP, PHP-FPM, SQL, Tips, CentOS] #### zram -swap 频繁交换会极大的影响主机性能,现在一般对小内存主机,使用 zram,不过 CentOS 7 并没有提供管理脚本,自己创建一个,以来 `bc` +swap 频繁交换会极大的影响主机性能,现在一般对小内存主机,使用 zram,不过 CentOS 7 并没有提供管理脚本,自己创建一个 - # yum install bc # touch /etc/init.d/zramswap # chmod +x /etc/init.d/zramswap @@ -194,99 +193,62 @@ swap 频繁交换会极大的影响主机性能,现在一般对小内存主机 ``` #!/bin/bash -### BEGIN INIT INFO -# Provides: zram -# Required-Start: -# Required-Stop: -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: Virtual Swap Compressed in RAM -# Description: Virtual Swap Compressed in RAM -### END INIT INFO -start() { - # get the number of CPUs - num_cpus=$(grep -c processor /proc/cpuinfo) - # if something goes wrong, assume we have 1 - [ "$num_cpus" != 0 ] || num_cpus=1 - - # set decremented number of CPUs - decr_num_cpus=$((num_cpus - 1)) - - # get the amount of memory in the machine - mem_total_kb=$(grep MemTotal /proc/meminfo | grep -E --only-matching '[[:digit:]]+') - - #we will only assign 50% of system memory to zram - mem_total_kb=$((mem_total_kb / 2)) +NUM_CPUS=$(nproc) +[ "$NUM_CPUS" != 0 ] || NUM_CPUS=1 +NUM_DEVS=$NUM_CPUS +FACTOR=50 # percentage +TOTALRAM=$(grep MemTotal /proc/meminfo | awk ' { print $2 } ') +DISK_SIZE=$(($TOTALRAM/$NUM_CPUS*$FACTOR/100*1024)) - mem_total=$((mem_total_kb * 1024)) +# show supported compression algorithms: `cat /sys/block/zram*/comp_algorithm` +# select your compression algorithm, lzo is the default +# speed: lz4 > zstd > lzo +# compression: zstd > lzo > lz4 +COMP_ALGORITHMS=lzo - # load dependency modules - modprobe zram num_devices=$num_cpus +#Defaults for vm.overcommit_memory, vm.page-cluster, vm.swappiness +OVERCOMMIT_MEMORY=0 +PAGE_CLUSTER=3 +SWAPPINESS=100 - # initialize the devices - for i in $(seq 0 $decr_num_cpus); do - echo $((mem_total / num_cpus)) > /sys/block/zram$i/disksize - done - # Creating swap filesystems - for i in $(seq 0 $decr_num_cpus); do - mkswap /dev/zram$i - done - - # Switch the swaps on - for i in $(seq 0 $decr_num_cpus); do - swapon -p 100 /dev/zram$i - done +start() { + [ ! -e /sys/module/zram ] && modprobe zram num_devices=$NUM_DEVS || modprobe -r zram && modprobe zram num_devices=$NUM_DEVS + for i in /sys/block/zram*; do + /usr/bin/echo $COMP_ALGORITHMS > ${i}/comp_algorithm; + /usr/bin/echo $DISK_SIZE > ${i}/disksize; + done + + for i in /dev/zram*; do + /usr/sbin/mkswap ${i}; + /usr/sbin/swapon -d -p100 ${i}; + done + + echo 1 > /proc/sys/vm/overcommit_memory + echo 0 > /proc/sys/vm/page-cluster + echo 100 > /proc/sys/vm/swappiness } stop() { - for i in $(grep '^/dev/zram' /proc/swaps | awk '{ print $1 }'); do - swapoff "$i" - done - - if grep -q "^zram " /proc/modules; then - sleep 1 - rmmod zram - fi -} + [ ! -e /sys/module/zram ] && exit 0 + + echo $OVERCOMMIT_MEMORY > /proc/sys/vm/overcommit_memory + echo $PAGE_CLUSTER > /proc/sys/vm/page-cluster + echo $SWAPPINESS > /proc/sys/vm/swappiness -status() { - ls /sys/block/zram* > /dev/null 2>&1 || exit 0 - echo -e "-------\nzram Compression Stats:\n-------" - for i in /sys/block/zram*; do - compr=$(< $i/compr_data_size) - orig=$(< $i/orig_data_size) - ratio=0 - if [ $compr -gt 0 ]; then - ratio=$(echo "scale=2; $orig*100/$compr" | bc -q) - fi - echo -e "/dev/${i/*\/}:\t$ratio% ($orig -> $compr)" - done - echo -e "-------\nSWAP Stats:\n-------" - swapon -s | grep zram - echo -e "-------\nMemory Stats:\n-------" - free -m -l -t + for i in /dev/zram*; do + /usr/sbin/swapoff ${i}; + done + + for i in /sys/block/zram*; do + /usr/bin/echo 1 > ${i}/reset; + done + [ -e /sys/module/zram ] && modprobe -r zram } -case "$1" in - start) - start - ;; - stop) - stop - ;; - restart) - stop - sleep 3 - start - ;; - status) - status - ;; - *) - echo "Usage: $0 {start|stop|restart|status}" - RETVAL=1 +case $1 in + (start|stop) "$1" ;; esac ``` @@ -322,56 +284,28 @@ Linux Tovalds 于 2016 年 12 月 11 日发布了 Kernel 4.9 正式版本,带 ##### 安装 -要在 CentOS 上安装最新的内核版本,我们需要增加一个 [ELRepo](http://elrepo.org/tiki/tiki-index.php) 源。 - -首先,让我们添加 ELRepo GPG key: - - rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org - -为 RHEL-6,SL-7,CentOS-7 源: - - rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm - -老版本也可以享受 kernel 4.9,譬如为 RHEL-6,SL-6,CentOS-6 添加 ELRepo 源: - - rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm +现在升级内核,没有那么复杂,也无需安装第三方源,在 CentOS-7.3.1611 之后用自带 repo 的即可,只需一行命令 -为 RHEL-5,SL-5,CentOS-5 添加 ELRepo 源: + # yum --enablerepo=centos-kernel update - rpm -Uvh http://www.elrepo.org/elrepo-release-5-5.el5.elrepo.noarch.rpm +或者编辑文件 `/etc/yum.repos.d/CentOS-x86_64-kernel.repo `,在 `[centos-kernel]` 下 -当然,别忘了 fastestmirror 还是需要的 - - yum install yum-plugin-fastestmirror - -最后,安装 kernel 4.9 - - yum --enablerepo=elrepo-kernel install kernel-ml - -当然,将 kernel-ml 选为第一启动,首先查看系统的内核以及顺序 - - awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg - -看下你当前默认启动项 - - grub2-editenv list - -将 kernel-ml 版本的内核设置为默认启动内核 - - grub2-set-default N + enabled=1 -以后升级内核默认启用 kernel-ml,编辑文件 `/etc/sysconfig/kernel` +再更新系统 - DEFAULTKERNEL=kernel-ml + # yum update -同时编辑文件 `/etc/yum.repo.d/elrepo.repo`,在 `[elrepo-kernel]` 下 +更新完成后重启,通过 `uname -a` 查看内核版本,譬如我的 - enabled=1 + $ uname -a + Linux CentOS 4.9.13-203.el7.x86_64 #1 SMP Wed Mar 08 13:39:54 EST 2017 x86_64 x86_64 x86_64 GNU/Linux -重启后,通过 `uname -a` 查看内核是否切换到 4.9,譬如我的 +一些 grub 操作内核的相关命令,可能用得到 - $ uname -a - Linux box 4.9.0-1.el7.elrepo.x86_64 #1 SMP Sun Dec 11 15:43:54 EST 2016 x86_64 x86_64 x86_64 GNU/Linux + awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg # 查看 grub 中内核版本以及顺序 + grub2-editenv list # 当前默认的启动项 + grub2-set-default N # 设置你需要的内核版本为默认启动内核 ##### 开启 BBR TCP diff --git a/_posts/2015-12-25-efi-boot-stub-for-gentoo.md b/_posts/2015-12-25-efi-boot-stub-for-gentoo.md index a0cc2c35b..88ae5ac5b 100644 --- a/_posts/2015-12-25-efi-boot-stub-for-gentoo.md +++ b/_posts/2015-12-25-efi-boot-stub-for-gentoo.md @@ -75,6 +75,11 @@ tags: [EFI, Gentoo] # ls /boot/EFI BOOT Microsoft +如果新装,你可能需要先格式化下 EFI 分区再挂载 + + # mkfs.fat -v -F 32 -n "ESP" /dev/sda1 + # mount /dev/sda1 /boot + 我们给 Gentoo 也建个文件夹,并将内核拷贝入其中(现在没人还在 32 位系统下了吧?) # mkdir /boot/EFI/Gentoo @@ -88,11 +93,19 @@ tags: [EFI, Gentoo] 通过 `efibootmgr -v` 来确认下,是否添加进去了,详细的用法可以通过 `efibootmgr --help` 来查看。 -PS:在我这里测试,efibootmgr 的调整,貌似只有在 (U)EFI 启动系统后才可以,bios mbr 启动则不生效。 +请确保使用 efibootmgr 操作 (U)EFI 时,已经处于 (U)EFI 启动模式下,且 `/sys/firmware/efi/efivars` 处于可读写状态,可以通过如下来确认: + + # mount | grep efivars + +如果结果返回只读 ro,则尝试重新挂载下: + + # mount -o rw,remount /sys/firmware/efi/efivars + +如果结果返回为空,则你需要一个支持 (U)EFI 启动的 livecd 来辅助。 ##### 2.2 efi shell -当然,你也可以直接在 efi shell 下添加,譬如我要添加 Gentoo Linux 的 (U)EFI 启动项到第四的位置,则在你进入 efi shell 后: +如果你主板内建 efi shell,你也可以直接在 efi shell 下添加,譬如我要添加 Gentoo Linux 的 (U)EFI 启动项到第四的位置,则在你进入 efi shell 后: Shell> bcfg boot dump -v Shell> bcfg boot add 3 fs0:\EFI\Gentoo\gentoo.efi "Gentoo Linux" diff --git a/_posts/2015-12-26-bsod-on-boot-0xc0000034.md b/_posts/2015-12-26-bsod-on-boot-0xc0000034.md index 7d8c9a6f1..e2d60db1e 100644 --- a/_posts/2015-12-26-bsod-on-boot-0xc0000034.md +++ b/_posts/2015-12-26-bsod-on-boot-0xc0000034.md @@ -1,7 +1,7 @@ --- layout: post title: "修复 Windows 10 UEFI 启动" -category: Other +category: Windows tags: [EFI] --- diff --git a/_posts/2018-01-20-recover-gcc-on-gentoo.md b/_posts/2018-01-20-recover-gcc-on-gentoo.md index a092558db..670929d78 100644 --- a/_posts/2018-01-20-recover-gcc-on-gentoo.md +++ b/_posts/2018-01-20-recover-gcc-on-gentoo.md @@ -71,10 +71,12 @@ Gentoo 什么都好,就是一旦完成了 no-multilib,就再也无法简单 挂载必要的目录,否则一些包可能无法顺利编译,譬如 **sys-libs/glibc** - mount -t proc none /mnt/gentoo/proc - mount --rbind /sys /mnt/gentoo/sys - mount --rbind /dev /mnt/gentoo/dev - chroot /mnt/gentoo /bin/bash + mount /dev/sda2 /mnt/gentoo # 你的根目录所在 + mount -t proc /proc /mnt/gentoo/proc + mount -R /sys /mnt/gentoo/sys + mount --make-rslave /mnt/gentoo/sys # 如果想调整 systemd + mount -R /dev /mnt/gentoo/dev + mount --make-rslave /mnt/gentoo/dev # 如果想调整 systemd chroot 之后呢,可以将对应的版本升级到最新版。 diff --git a/_posts/2020-06-12-zeropi-record.md b/_posts/2020-06-12-zeropi-record.md index bea9bb316..dd852ae94 100644 --- a/_posts/2020-06-12-zeropi-record.md +++ b/_posts/2020-06-12-zeropi-record.md @@ -9,23 +9,23 @@ tags: [arm, Linux] 购入 ZeroPi 半年多,吃灰居多,偶尔拿来构建 Docker 镜像,偶尔编译一些小工具,跑一些小测试等等,用处很单一。为防止记忆遗忘,记录一些备查。 -ZeroPi 是友善出的一款单片机,对于没有接触过单片机的同学,它其实是一个比较好的上手玩具。当然,没有显示接口对于接触过 Linux 的同学来说,应该也没有什么问题。 +ZeroPi 是友善出的一款开发板,对于没有接触过开发板的同学,它其实是一个比较好的上手玩具。当然,没有显示接口对于接触过 Linux 的同学来说,应该也没有什么问题。 -Armbian 的安装没有什么难处,网上资料太多,这里只记录一些不是大众化的资料,其他的单片机使用 Armbian 的话也可以参考。 +Armbian 的安装没有什么难处,网上资料太多,这里只记录一些不是大众化的资料,其他的开发板使用 Armbian 的话也可以参考。 #### UART -Debug 的 UART 接驳好后,可以直接用 MacOS/Linux 的 screen 工具进入,针对 ZeroPi 的 UART 波特率为 115200bps。 +用于 Debug Port 的 UART 接驳好后,可以直接用 MacOS/Linux 的 screen 工具进入。UART 波特率为 115200bps。 - screen /dev/tty.usbserial-XXXXXXXX 115200 + $ screen /dev/tty.usbserial-XXXXXXXX 115200 串行端口号可以直接用 tab 补全。 #### 网络 -Armbian 默认是启用 Network Manager 来管理网络,armbian-config 中的网络配置也是使用此工具,不过看了下 ZeroPi 的硬件,本着能省则省的态度,我还是直接使用自带的网络工具去配置了,编辑 `/etc/network/interfaces`。 +Armbian 默认是启用 Network Manager 来管理网络,armbian-config 中的网络配置也是使用此工具,不过看了下 ZeroPi 的硬件,本着能省则省的态度,我还是直接使用自带的网络工具去配置了,编辑文件 `/etc/network/interfaces` source /etc/network/interfaces.d/* # Network is managed by Network manager @@ -34,60 +34,81 @@ Armbian 默认是启用 Network Manager 来管理网络,armbian-config 中的 allow-hotplug eth0 iface eth0 inet dhcp - hwaddress ether 12:23:34:45:56:67 不要自动配置 nameserver - dpkg-reconfigure resolvconf # answer no + # dpkg-reconfigure resolvconf # answer no -编辑 `/etc/resolvconf/resolv.conf.d/head` +编辑文件 `/etc/resolvconf/resolv.conf.d/head` nameserver your-dns 最后更新 nameserver - resolvconf -u + # resolvconf -u -我有一个 N 年前购入的小米无线网卡,所以我增加了无线部分的设置,便于在断开网线的时候,也可以接入网络。 +我有一个 N 年前购入的小米无线网卡,所以我增加了无线部分的设置,便于在断开网线的时候,也可以接入网络。编辑 `/etc/network/interfaces` + ...... iface wlxfc0123456789 inet dhcp wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf 其中 `/etc/wpa_supplicant/wpa_supplicant.conf` 的配置可以使用如下命令写入 - wpa_passphrase your-ssid your-password >> \ - /etc/wpa_supplicant/wpa_supplicant.conf + # wpa_passphrase your-ssid your-password >> /etc/wpa_supplicant/wpa_supplicant.conf #### udev 总感觉 led 的颜色怪怪的,后来发现,因为是红色灯常亮,改一下,让蓝色灯常亮,有数据读写的时候红灯闪。这里我使用 udev 来实现。 -led 的接入并被挂载为 `/dev/uleds`: +led 的内核触发控制一般在 `/sys/class/leds`中。 + + $ ls -l /sys/class/leds/ + total 0 + lrwxrwxrwx 1 root root 0 Jan 1 1970 nanopi:blue:status -> ../../devices/platform/leds/leds/nanopi:blue:status + lrwxrwxrwx 1 root root 0 Jan 1 1970 nanopi:green:pwr -> ../../devices/platform/leds/leds/nanopi:green:pwr + +查看下属性的控制参数 - udevadm info -a -p `udevadm info -q path -n /dev/uleds` +绿色 led (颜色定义在设备树,实际红色,这里定义成绿色) + + # udevadm info --path=/sys/class/leds/nanopi\:green\:pwr --query=all --attribute-walk ...... - looking at device '//devices/virtual/misc/uleds': - KERNEL=="uleds" - SUBSYSTEM=="misc" + looking at device '/devices/platform/leds/leds/nanopi:green:pwr': + KERNEL=="nanopi:green:pwr" + SUBSYSTEM=="leds" DRIVER=="" + ATTR{trigger}=="none rc-feedback kbd-scrolllock kbd-numlock kbd-capslock kbd-kanalock kbd-shiftlock kbd-altgrlock kbd-ctrllock kbd-altlock kbd-shiftllock kbd-shiftrlock kbd-ctrlllock kbd-ctrlrlock usbport disk-activity disk-read disk-write ide-disk mtd nand-disk heartbeat cpu cpu0 cpu1 cpu2 cpu3 activity [default-on] panic mmc0 rfkill-any rfkill-none 0.2:07:link 0.2:07:1Gbps 0.2:07:100Mbps 0.2:07:10Mbps phy0rx phy0tx phy0assoc phy0radio rfkill0" + ATTR{max_brightness}=="255" + ATTR{brightness}=="0" + ...... + +蓝色 led + + # udevadm info --path=/sys/class/leds/nanopi\:blue\:status --query=all --attribute-walk ...... + looking at device '/devices/platform/leds/leds/nanopi:blue:status': + KERNEL=="nanopi:blue:status" + SUBSYSTEM=="leds" + DRIVER=="" + ATTR{brightness}=="255" + ATTR{max_brightness}=="255" + ATTR{trigger}=="none rc-feedback kbd-scrolllock kbd-numlock kbd-capslock kbd-kanalock kbd-shiftlock kbd-altgrlock kbd-ctrllock kbd-altlock kbd-shiftllock kbd-shiftrlock kbd-ctrlllock kbd-ctrlrlock usbport disk-activity disk-read disk-write ide-disk mtd nand-disk heartbeat cpu cpu0 cpu1 cpu2 cpu3 activity default-on panic [mmc0] rfkill-any rfkill-none 0.2:07:link 0.2:07:1Gbps 0.2:07:100Mbps 0.2:07:10Mbps phy0rx phy0tx phy0assoc phy0radio rfkill0" -这里获取到我们的led设备使用 `KERNEL=="uleds"` 与 `SUBSYSTEM=="misc"`,触发的控制一般在 `/sys/class/leds`中。 -创建一个文件 `/etc/udev/rules.d/90-power-leds.rules` 后写入: +参数都呈现了,那么直接创建文件来修改了 `/etc/udev/rules.d/90-power-leds.rulesi` - KERNEL=="uleds", SUBSYSTEM=="misc", PROGRAM="/bin/sh -c '\ - echo mmc0 > /sys/class/leds/nanopi\:green\:pwr/trigger && \ - echo default-on > /sys/class/leds/nanopi\:blue\:status/trigger'" + KERNEL=="nanopi:blue:status", SUBSYSTEM=="leds", ACTION=="add", DRIVER=="", ATTR{trigger}=="default-on" + KERNEL=="nanopi:green:pwr", SUBSYSTEM=="leds", ACTION=="add", DRIVER=="", ATTR{trigger}=="mmc0" 手动测试下是否有错误 - udevadm test /sys/class/leds/nanopi\:blue\:status - udevadm test /sys/class/leds/nanopi\:green\:status + # udevadm test /sys/class/leds/nanopi\:blue\:status + # udevadm test /sys/class/leds/nanopi\:green\:pwr 重载下规则 - udevadm control --reload + # udevadm control --reload #### 蓝牙适配器 @@ -103,25 +124,25 @@ led 的接入并被挂载为 `/dev/uleds`: [bluetooth]# trust 11:22:33:44:55:66 # 键盘设备为可信 [bluetooth]# connect 11:22:33:44:55:66 # 进行连接 -配置的时候,你需要另外一个键盘...... +如果不是双模键盘,你可能需要另外一个键盘 ssh 进去配置...... #### tmpfs 不知为何,Armbian 的某些版本,默认没有将 `/run/user/nums` 挂载为 tmpfs,考虑了下 MicroSD 的速度,一些东西还是尽量放内存吧。 - apt install libpam-systemd # 嗯,装这个包,重启即可 + # apt install libpam-systemd # 嗯,装这个包,重启即可 另外,`/tmp` 默认也没有挂载为 tmpfs,修改下 - ln -sf /usr/share/systemd/tmp.mount /etc/systemd/system/ - systemctl enable tmp.mount - systemctl start tmp.mount + # ln -sf /usr/share/systemd/tmp.mount /etc/systemd/system/ + # systemctl enable tmp.mount + # systemctl start tmp.mount #### iptables -一般单片机内存都小的可怜,firewalld 尽管好用,内存占用也不小,本着能省即省的态度,还是用 iptables 吧 +一般开发板内存都小的可怜,firewalld 尽管好用,内存占用也不小,本着能省即省的态度,还是用 iptables 吧 - apt install iptables + # apt install iptables 写入 iptables 规则到文件 `/etc/iptables.rule` @@ -142,15 +163,15 @@ led 的接入并被挂载为 `/dev/uleds`: 载入规则 - iptables-restore < /etc/iptables.rule + # iptables-restore < /etc/iptables.rule 安装 iptables-persistent 使之开启自启动 - apt install iptables-persistent + # apt install iptables-persistent #### nftables -也可以直接使用 nftable,写入配置 /etc/nftabls.conf +也可以直接使用 nftable,写入配置文件 `/etc/nftables.conf` #!/sbin/nft -f flush ruleset @@ -183,34 +204,24 @@ led 的接入并被挂载为 `/dev/uleds`: 载入规则 - nft -f /etc/nftables.conf + # nft -f /etc/nftables.conf #### swap -单片机基本不是 mmc 就是 tf,读写速度堪忧,在上面挂载 swap 性能极低,虽然 debian 自带了 zram-tools 工具去创建 zram 设备,但是 armbian 也自己维护了一个工具,默认就安装好,查看下 +开发板基本不是 mmc 就是 tf,读写速度堪忧,在上面挂载 swap 性能极低,虽然 debian 自带了 zram-tools 工具去创建 zram 设备,但是 armbian 也自己维护了一个工具,默认就安装好,查看下 - zramctl - free -h + # zramctl + # free -h -本质是内存中动态划出一个空间用做 swap,性能一下子就上去了,如此,可以大胆的如下操作了,顺便将 bbr 也打开吧 +本质是内存中动态划出一个空间用做 swap,性能一下子就上去了,如此,可以大胆的如下操作了,顺便将 bbr 也打开吧 `/etc/sysctl.d/99-custom.conf` - /etc/sysctl.d/custom.conf vm.swappiness = 100 net.core.default_qdisc = fq net.ipv4.tcp_congestion_control = bbr - #载入 - sysctl -p /etc/sysctl.d/custom.conf - -#### docker-compose - -docker 已经是必不可少了,官方文档就有安装步骤,但是并没有提供 docker-compose 的 arm 二进制文件,只能安装 debian 维护的版本,但是这个版本有一个问题,导致 docker login 失败。 -所以还是直接搞一个 arm 的二进制单文件版本吧 +载入 - docker run --rm -v /usr/local/bin:/dist \ - gists/docker-compose-bin:latest - docker rmi gists/docker-compose-bin:latest - docker-compose -v + # sysctl -p /etc/sysctl.d/custom.conf 参考资料: diff --git a/_posts/2020-09-20-committing-changes-to-a-pull-request.md b/_posts/2020-09-20-committing-changes-to-a-pull-request.md new file mode 100644 index 000000000..4611efac1 --- /dev/null +++ b/_posts/2020-09-20-committing-changes-to-a-pull-request.md @@ -0,0 +1,48 @@ +--- +layout: post +title: "在GitHub 上对他人发起的 Pull Request 做一些修改" +category: Linux +tags: [GitHub, CLI] +--- + + +为了保持贡献者的积极性,一般而言,偏向于合并贡献者的 pr,但是,有些 pr 在合并之前,其实需要一些小修改。 + +我们可以直接在 github 的 pr 上,给他们提一些小建议,引导对方去做修改。我们也可以直接对他们的 pr 做修改,同时向贡献者说明情况,获得他们的谅解,尽管这其实是在贡献者发起 pr 时的默认同意选项。 + +这一切的前提是,你是项目主,或拥有项目的 commit 权限。 + + + +假设你已经在本地拥有项目的克隆。那么首先需要在本地将贡献者的 fork 仓库加入远程列表中。 + + git remote add contributor https://github.com/contributor/repo.git + +现在,你有了两个远程地址,**origin** 和 **contributor**。你可以通过 `git remote -v` 来获得已经加入成功的确认。 + +获取贡献者仓库,并切换到贡献者做提交的那个分支,譬如 fix-xxx 到本地的 contributor-fix-xxx 分支 + + git fetch contributor + git checkout -b contributor-fix-xxx contributor/fix-xxx + +或者,获取 pr 到本地分支 contributor-fix-xxx 上,并切换 + + git pull origin pull/number/head:contributor-fix-xxx + git checkout contributor-fix-xxx + +然后,在本地做出你的修改提交后,推送到贡献者仓库的对应分支中 + + git commit -m 'fix xxx' + git push contributor contributor-fix-xxx:fix-xxx + +如此,你做的提交就会出现在 pr 页。 + +注:`:` 在 pull 和 push 时的不同用法 + + git pull origin remote-branch:local-branch + git push origin local-branch:remote-branch + +参考: + +- [Committing changes to a pull request branch created from a fork](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/committing-changes-to-a-pull-request-branch-created-from-a-fork) +- [How to modify someone else's Github pull request?](https://stackoverflow.com/questions/44030176/how-to-modify-someone-elses-github-pull-request) diff --git a/_posts/2021-05-25-gentoo-on-wsl2.md b/_posts/2021-05-25-gentoo-on-wsl2.md new file mode 100644 index 000000000..96ad65a8b --- /dev/null +++ b/_posts/2021-05-25-gentoo-on-wsl2.md @@ -0,0 +1,123 @@ +--- +layout: post +title: "WSL 2 中安装 Gentoo" +category: Linux +tags: [Gentoo, WSL] +--- + +首先要启用 WSL 2 组件,打开 powershell + + PS C:\Users\yourname> Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux + PS C:\Users\yourname> Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform + + +重启后将 WSL 2 设置为默认 + + PS C:\Users\yourname> wsl --set-default-version 2 + + + +你可能想限制 Gentoo 使用的内存,cpu 线程等,在 Windows 的用户目录 **%HOMEPATH%** 创建文件 `%HOMEPATH%\.wslconfig` + + [wsl2] + memory=8GB + processors=4 + swap=1G + swapFile=%USERPROFILE%\Apps\Gentoo\swap.vhdx + localhostForwarding=true + EOF + +接下来,去你喜欢的镜像源中下载最新的 stage3 压缩包,由于默认下载的是 tar.xz 压缩包,WSL 2 无法导入,用你熟悉的工具将 tar.xz 解压成 tar 包 + +打开 windows terminal 或其他的 powershell 终端,将下载的 tar 包导入到 WSL 2 中 + + PS C:\Users\yourname> wsl --import Gentoo $HOME\Apps\Gentoo $HOME\Downloads\stage3-amd64-xxx.tar --version 2 + +前一个路径,用于存放虚拟磁盘的文件夹,后一个是你下载的 stage3 的 tar 包的路径,查看导入的结果 + + PS C:\Users\yourname> wsl -l -v + NAME STATE VERSION + * Gentoo Stopped 2 + +随后,即可进入 Gentoo 中 + + PS C:\Users\yourname> wsl -d Gentoo + +安全起见,给你的 root 上一个密码吧 + + # passwd root + +现在同步下你的 portage 树 + + # emerge-webrsync + +创建你的用户 + + # useradd -G wheel,users yourname + # password yourname + +安装一个 sudo,并通过 `visudo` 来启用 wheel 用户组的权限 + + # emerge -av sudo + +之后,启动的时候,就可以使用如下命令进入 Gentoo + + PS C:\Users\yourname> wsl -d Gentoo -u yourname + +打开注册表,编辑 `HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\{GUID}`,找到有 Gentoo 键值的 **GUID**,编辑里面的 **DefaultUid**,设置其十进制值为 1000 ( 十六进制为 03e8 ),以便开启 Gentoo 的时候,默认登陆用户为 uid=1000 的用户。 + +你可能想在进入 Gentoo 后自动挂载宿主机的盘符,Gentoo 中创建文件 `/etc/wsl.conf` + + [automount] + enable = true + root = /mnt/ + options = "metadata,umask=22,fmask=133" + mountFsTab = true + [user] + default = yourname + [network] + generateHosts = true + generateResolvConf = true + [interop] + enabled = false + appendWindowsPath = false + +顺便,/tmp 还是用 tmpfs 吧 `/etc/fstab` + + tmpfs /tmp tmpfs rw,nosuid,noatime,nodev,size=512M,mode=1777 0 1 + +最后退出 Gentoo,并在 powershell 中终止 Gentoo 以便 WSL 2 相关配置生效,再重新进入 + + PS C:\Users\yourname> wsl --terminate Gentoo + PS C:\Users\yourname> wsl -d Gentoo + +配置好 Gentoo 后,你可能想导出备份 + + PS C:\Users\yourname> wsl --shutdown + PS C:\Users\yourname> wsl -v -l + NAME STATE VERSION + * Gentoo Stopped 2 + PS C:\Users\yourname> wsl --export Gentoo $HOME\Downloads\Gentoo.tar + +如果后期想压缩 vhdx + + PS C:\Users\yourname> wsl --shutdown + PS C:\Users\yourname> diskpart + DISKPART> select vdisk file="C:\Users\yourname\Apps\Gentoo\ext4.vhdx" + DISKPART> attach vdisk readonly + DISKPART> compact vdisk + DISKPART> detach vdisk + DISKPART> exit + PS C:\Users\yourname> + +想清理 vhdx 空间,需要 windows 专业版才行 + + PS C:\Users\yourname> Optimize-VHD -Path C:\Users\yourname\Apps\Gentoo\ext4.vhdx -Mode Full + +移动 vhdx 位置,需要先注销 + + PS C:\User\yourname> wsl --unregister Gentoo + +参考: + +- diff --git a/_posts/2021-06-22-migration-to-25519.md b/_posts/2021-06-22-migration-to-25519.md new file mode 100644 index 000000000..8e8eb1e63 --- /dev/null +++ b/_posts/2021-06-22-migration-to-25519.md @@ -0,0 +1,234 @@ +--- +layout: post +title: "密钥是时候更换到曲线 25519 " +category: Linux +tags: [25519, openssl, gnupg] +--- + +有关 Curve25519/Ed25519/X25519 介绍的文章已经很多,分别指的椭圆曲线加密/签名/密钥交换算法。由于 NIST 系列的不透明以及来历不明参数,被广泛怀疑。棱镜门后,25519 系列开始逐渐被大众接受。直至当下的部署情况: [Things that use Curve25519](https://ianix.com/pub/curve25519-deployment.html) + +具体介绍就不多说了,以下简单说一下常用场景使用 25519 算法的过程。 + + + +#### TLS 自签证书 + +以下 tls 自签证书,可以被 curl/links 等客户端支持,可以在私有场合使用。 + +Firefox/Chrome 等浏览器还未支持,因为浏览器供应商联合公共信任中心组成的行业联盟规定了 X.509/WebPKI 中的可用 ECC 大部分被限于 NIST 系列。如果是架设公共服务,那么请谨慎使用。 + +ED25519 需要 OpenSSL 1.1.1 以及之后的版本。 + +###### ED25519 key + + $ openssl genpkey -algorithm ED25519 -out server.key + +###### PKCS#10 + + $ openssl req -new -out server.csr -key server.key -subj '/C=US/ST=CA/L=San Francisco/O=Internet Widgits Pty Ltd/OU=IT/CN=Self-signed ECC/emailAddress=admin@domain.com' + +###### Sign csr + + $ openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt + +###### 查看 + +``` +$ openssl req -in server.csr -text -noout +Certificate Request: + Data: + Version: 1 (0x0) + Subject: C = US, ST = CA, L = San Francisco, O = Internet Widgits Pty Ltd, OU = IT, CN = Self-signed ECC, emailAddress = admin@domain.com + Subject Public Key Info: + Public Key Algorithm: ED25519 + ED25519 Public-Key: + pub: + 43:b5:f2:51:f0:33:df:7b:47:74:d4:b2:75:ef:77: + 3a:cd:f0:c9:2c:ad:25:64:de:93:85:f5:bd:ad:5b: + 2d:5f + Attributes: + a0:00 + Signature Algorithm: ED25519 + 9a:53:53:fa:b6:d2:ca:a7:e3:db:86:5c:dc:04:78:c1:5c:ba: + de:50:54:48:20:86:36:c3:76:64:0a:01:3e:59:49:8d:51:4c: + 46:ca:52:e9:0e:fa:18:4b:12:4d:63:b2:3d:de:f3:40:30:85: + ec:75:2d:7e:03:b5:02:34:cd:0c +``` + +#### OpenSSH 密钥对 + +``` +$ ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -C "yourname@domain.com" +Generating public/private ed25519 key pair. +Enter passphrase (empty for no passphrase): +Enter same passphrase again: +Your identification has been saved in /Users/name/.ssh/id_ed25519. +Your public key has been saved in /Users/name/.ssh/id_ed25519.pub. +The key fingerprint is: +SHA256:/IzQ36S2fWk549u16/8CmZEAJ+0Niv3C5QfhB+Tg/us yourname@domain.com +The key's randomart image is: ++--[ED25519 256]--+ +| ++o | +| . =* | +| o.+.* . | +| .+o = = | +| ..S+ o.+ | +| .o*o+= | +| ..B... o.| +| . + O.o| +| .E .++OB| ++----[SHA256]-----+ +``` + +你也可以添加 `-a 100` 参数增加求导函数的次数,注意:该数字越高 = 越慢的密码验证 = 更高的抗暴力密码破解。针对的是密码而非密钥本身。 + +#### GnuPG 密钥对 + +``` +$ gpg --expert --full-gen-key +Please select what kind of key you want: + (1) RSA and RSA (default) + (2) DSA and Elgamal + (3) DSA (sign only) + (4) RSA (sign only) + (7) DSA (set your own capabilities) + (8) RSA (set your own capabilities) + (9) ECC and ECC + (10) ECC (sign only) + (11) ECC (set your own capabilities) + (13) Existing key + (14) Existing key from card +Your selection? 9 +Please select which elliptic curve you want: + (1) Curve 25519 + (3) NIST P-256 + (4) NIST P-384 + (5) NIST P-521 + (6) Brainpool P-256 + (7) Brainpool P-384 + (8) Brainpool P-512 + (9) secp256k1 +Your selection? 1 +Please specify how long the key should be valid. + 0 = key does not expire + = key expires in n days + w = key expires in n weeks + m = key expires in n months + y = key expires in n years +Key is valid for? (0) 2y +Key expires at Tue Jun 22 12:59:57 2023 CST +Is this correct? (y/N) y + +GnuPG needs to construct a user ID to identify your key. + +Real name: Your Name +Email address: yourname@domain.com +Comment: Your Comment +You selected this USER-ID: + "Your Name (Your Comment) " + +Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O +We need to generate a lot of random bytes. It is a good idea to perform +some other action (type on the keyboard, move the mouse, utilize the +disks) during the prime generation; this gives the random number +generator a better chance to gain enough entropy. +We need to generate a lot of random bytes. It is a good idea to perform +some other action (type on the keyboard, move the mouse, utilize the +disks) during the prime generation; this gives the random number +generator a better chance to gain enough entropy. +gpg: key 0x8F75F10ABACF9D18 marked as ultimately trusted +gpg: revocation certificate stored as '/Users/name/.gnupg/openpgp-revocs.d/0C2DDA1BA5738976147F17F18F75F10ABACF9D18.rev' +public and secret key created and signed. + +pub ed25519/0x8F75F10ABACF9D18 2021-06-22 [SC] [expires: 2023-06-22] + Key fingerprint = 0C2D DA1B A573 8976 147F 17F1 8F75 F10A BACF 9D18 + Keygrip = CA2F58C28CC8A23E8A87000482236C9DCB0EB7E7 +uid Your Name (Your Comment) +sub cv25519/0xC63205BDCC95F10A 2021-06-22 [E] [expires: 2023-06-22] + Keygrip = 08852924712C889AA1148A35F258CACCE511E908 +``` + +事实上,gpg 也可以创建用于 ssh 的认证密钥对 + +``` +$ gpg --expert --edit-key 0x8F75F10ABACF9D18 +Secret key is available. + +sec ed25519/0x8F75F10ABACF9D18 + created: 2021-06-22 expires: 2023-06-22 usage: SC + trust: ultimate validity: ultimate +ssb cv25519/0xC63205BDCC95F10A + created: 2021-06-22 expires: 2023-06-22 usage: E +[ultimate] (1). Your Name (Your Comment) + +gpg> addkey +Please select what kind of key you want: + (3) DSA (sign only) + (4) RSA (sign only) + (5) Elgamal (encrypt only) + (6) RSA (encrypt only) + (7) DSA (set your own capabilities) + (8) RSA (set your own capabilities) + (10) ECC (sign only) + (11) ECC (set your own capabilities) + (12) ECC (encrypt only) + (13) Existing key + (14) Existing key from card +Your selection? 11 + +Possible actions for a ECDSA/EdDSA key: Sign Authenticate +Current allowed actions: Sign + + (S) Toggle the sign capability + (A) Toggle the authenticate capability + (Q) Finished + +Your selection? A + +Possible actions for a ECDSA/EdDSA key: Sign Authenticate +Current allowed actions: Sign Authenticate + + (S) Toggle the sign capability + (A) Toggle the authenticate capability + (Q) Finished + +Your selection? Q +Please select which elliptic curve you want: + (1) Curve 25519 + (3) NIST P-256 + (4) NIST P-384 + (5) NIST P-521 + (6) Brainpool P-256 + (7) Brainpool P-384 + (8) Brainpool P-512 + (9) secp256k1 +Your selection? 1 +Please specify how long the key should be valid. + 0 = key does not expire + = key expires in n days + w = key expires in n weeks + m = key expires in n months + y = key expires in n years +Key is valid for? (0) 2y +Key expires at Tue Jun 22 13:14:54 2023 CST +Is this correct? (y/N) y +Really create? (y/N) y +We need to generate a lot of random bytes. It is a good idea to perform +some other action (type on the keyboard, move the mouse, utilize the +disks) during the prime generation; this gives the random number +generator a better chance to gain enough entropy. + +sec ed25519/0x8F75F10ABACF9D18 + created: 2021-06-22 expires: 2023-06-22 usage: SC + trust: ultimate validity: ultimate +ssb cv25519/0xC63205BDCC95F10A + created: 2021-06-22 expires: 2023-06-22 usage: E +ssb ed25519/0x6C1FDAA711647985 + created: 2021-06-22 expires: 2023-06-22 usage: SA +[ultimate] (1). Your Name (Your Comment) + +gpg> quit +Save changes? (y/N) y +``` + +最后按照 [GnuPG 介绍]({% post_url 2012-07-18-gnupg-usage %}) 中 **作为 ssh 公钥** 部分内容,配置下即可完成。 diff --git a/_posts/2022-03-08-perfer-ipv4.md b/_posts/2022-03-08-perfer-ipv4.md new file mode 100644 index 000000000..9d33d500d --- /dev/null +++ b/_posts/2022-03-08-perfer-ipv4.md @@ -0,0 +1,58 @@ +--- +layout: post +title: "双栈网络上优先使用 IPv4" +category: Linux +tags: [IPv4, IPv6] +--- + +随着 IPv6 的普及,对网络特定的需求也得到改变,一些特定的场景下,我需要系统优先访问 IPv4,但是访问 IPv6网络应用也要能正常访问。但是现代操作系统,默认基本都是 IPv6 优先,所以接下来需要做一些特定的设置。 + +#### Linux + +GNU/Linux 比较简单,在系统已经安装 glibc 的前提下,编辑 **/etc/gai.conf** 文件,取消下面行的注释 + + precedence ::ffff:0:0/96 100 + + + +对于使用 musl libc 或其他库的系统,譬如 alpine linux,则目前除了通过内核参数来禁用 ipv6 外,没什么更好的方法。 + +#### Windows 10/11 + +以管理员身份运行终端,首先查看当前系统的优先级。 + +``` +netsh interface ipv6 show prefixpolicies +查询活动状态... + +优先顺序 标签 前缀 +---------- ----- -------------------------------- + 50 0 ::1/128 + 40 1 ::/0 + 35 4 ::ffff:0:0/96 + 30 2 2002::/16 + 5 5 2001::/32 + 3 13 fc00::/7 + 1 11 fec0::/10 + 1 12 3ffe::/16 + 1 3 ::/96 +``` + +在 [IANA IPv6 Special-Purpose Address Registry](https://www.iana.org/assignments/iana-ipv6-special-registry/iana-ipv6-special-registry.xhtml) 中我们可以找到这些前缀的分配归属。由此得知 `::/0` 为 IPv6 单播地址,`::ffff:0:0/96` 为 IPv4 地址范围。 + +目前我们的 IPv6 的优先级高于 IPv4,调整其优先顺序即可。 + + netsh interface ipv6 set prefixpolicy ::ffff:0:0/96 45 4 + +恢复的话很简单,输入如下命令后重启系统 + + netsh interface ipv6 reset + +这里还有微软提供的非命令行方法,与注册表方法: + +- [ipv6&ipv4双ip下 win11如何设置ipv4优先](https://answers.microsoft.com/zh-hans/windows/forum/all/ipv6ipv4%E5%8F%8Cip%E4%B8%8B/42766058-c61e-4cb3-97f8-f2045859e497) +- [在 Windows 中为高级用户配置 IPv6 的指南](https://learn.microsoft.com/zh-CN/troubleshoot/windows-server/networking/configure-ipv6-in-windows) + +如此,Windows 系统也将优先 IPv4 了。 + +可以通过 `ping www.taobao.com` 来观察前后的变化。 diff --git a/_posts/2023-02-18-enable-promiscuous-mode-on-nics.md b/_posts/2023-02-18-enable-promiscuous-mode-on-nics.md new file mode 100644 index 000000000..81ad3e49d --- /dev/null +++ b/_posts/2023-02-18-enable-promiscuous-mode-on-nics.md @@ -0,0 +1,66 @@ +--- +layout: post +title: "打开网卡的 promiscuous 模式" +category: Linux +tags: [Network] +--- + +如果需要桥接网络设备,或者尝试 docker 的 macvlan 网络,那么势必要打开网卡的 promiscuous 模式。 + +首先,最近的 linux 发行版都支持用命令行临时打开。 + + sudo ip link set dev eth0 promisc on + +只是绝大多数时候我们需要永久打开 promiscuous 模式。那么我们可能根据自己系统选择合适的方法。 + + + +#### 一. NetworkManager + +如果你的网络管理操作是 **NetworkManager**,那么可以试试 NetworkManager-dispatcher,根据你自己的发行版,自行安装 NetworkManager-dispatcher,随后,创建 `/etc/NetworkManager/dispatcher.d/60-promisc`,根据你自己的网卡名,填入如下内容: + + #! /usr/bin/env bash + case "$2" in + up) + if [[ "$1" = "eth0" ]] || [[ "$1" = "eth1" ]]; then + ip link set dev $1 promisc on + fi + ;; + esac + +随后,添加执行权限 + + sudo chmod +x /etc/NetworkManager/dispatcher.d/60-promisc + +#### 二. systemd + +创建一个 systemd service 在 network-online.target 后开始运行,创建文件 `/etc/systemd/system/nics-promisc.service` + + [Unit] + Description=enable promiscuous mode after network online + After=network-online.target + + [Service] + Type=oneshot + ExecStart=/usr/sbin/ip link set dev eth0 promisc on + ExecStart=/usr/sbin/ip link set dev eth1 promisc on + TimeoutStartSec=0 + RemainAfterExit=yes + + [Install] + WantedBy=default.target + +#### 三. systemd-networkd + +有些朋友使用 systemd-networkd 来管理网络。编辑 `/etc/systemd/network/eth0.network`,根据你自己的设备来 + + [Match] + Name=eth0 + + [Link] + Promiscuous=true + +参考: + +- [Persistent promiscuous mode in Debian 12](https://superuser.com/questions/1804774/persistent-promiscuous-mode-in-debian-12) +- [systemd.network](https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html) diff --git a/_posts/2023-02-22-ipv6-privacy-extensions.md b/_posts/2023-02-22-ipv6-privacy-extensions.md new file mode 100644 index 000000000..80f8534b3 --- /dev/null +++ b/_posts/2023-02-22-ipv6-privacy-extensions.md @@ -0,0 +1,82 @@ +--- +layout: post +title: "IPv6 隐私扩展" +category: Linux +tags: [Network] +--- + +DHCPv6 方式管理 IPv6 不在本文讨论之列,这篇文章主要是介绍通过 SLAAC (Stateless Address Autoconfiguration) 来生成 IPv6 后,打开 IPv6 隐私扩展。 + +未打开 IPv6 隐私扩展前,SLAAC 生成的 v6 地址,其后缀可以通过一些方法算出 MAC 地址。默认 SLAAC 本身就是通过 IPv6 前缀 + MAC 地址来生成的。这对服务器而言是无所谓的,但是对个人用户来说,有隐私方面的问题。所以我们需要打开 IPv6 隐私扩展,来生成一个随机的临时 v6 地址,且远程连接时优先选用这个临时 v6 地址。 + + + +#### 一. 内核参数 + +首先将内核参数打开,尽管 systemd-networkd 默认选择不遵守内核参数。 + +编辑 `/etc/sysctl.conf`,加入如下参数 + + # Enable Privacy Extensions + net.ipv6.conf.all.use_tempaddr = 2 + net.ipv6.conf.default.use_tempaddr = 2 + +重启后即可生效,如果只想某个网口开启,则 + + # Enable Privacy Extensions for eth1 + net.ipv6.conf.eth1.use_tempaddr = 2 + +同样重启生效。想要立即生效的话,打开终端,用root权限运行 + + sysctl -w net.ipv6.conf.eth1.use_tempaddr=2 + +#### 二. NetworkManager + +默认配置下,NetworkManager 会根据内核参数来决定是否开启隐私扩展。如果你已经做了内核参数哪一步,那么这里可以省略。如果不想动内核参数,那么你需要告诉 NetworkManager 来明确启用 IPv6 隐私扩展。 + +全局生效,编辑 **/etc/NetworkManager/conf.d/v6-privacy.conf** + + [connection] + ipv6.ip6-privacy=2 + +单独接口生效的话,编辑对应的连接文件,在 **/etc/NetworkManager/system-connections/** 下面,譬如编辑 **'Wired connection 1.nmconnection'** 文件 + + ... + [ipv6] + ip6-privacy=2 + ... + +#### 三. systemd-networkd + +前面说过,systemd-network 的 IPv6 隐私扩展,默认选项不遵守内核参数。 + +>IPv6PrivacyExtensions= +> +> Configures use of stateless temporary addresses that change over time (see RFC 4941, Privacy Extensions for Stateless Address Autoconfiguration in IPv6). Takes a boolean or the special values "prefer-public" and "kernel". When true, enables the privacy extensions and prefers temporary addresses over public addresses. When "prefer-public", enables the privacy extensions, but prefers public addresses over temporary addresses. When false, the privacy extensions remain disabled. When "kernel", the kernel's default setting will be left in place. When unspecified, the value specified in the same setting in networkd.conf(5), which defaults to "no", will be used. + +如果未设置,那其默认为 no,即关闭 IPv6 隐私扩展,可用选项为 `true | false | prefer-public | kernel`。 + + - true: 打开 IPv6 隐私扩展,优先使用临时地址 + - false: 关闭 IPv6 隐私扩展 + - prefer-public: 打开 IPv6 隐私扩展,但优先使用 Public 地址 + - kernel: 根据内核参数来决定 + +如果你前面没有设置过 IPv6 隐私扩展相关的内核参数,那么这里可以选择 `true`。否则可以选择 `true | kernel`。 + +全局模式,编辑 **/etc/systemd/networkd.conf**。 + + [network] + ... + IPv6PrivacyExtensions=kernel + +针对单独的接口生效,编辑 **/etc/systemd/network/eth0.network**。 + + [network] + ... + IPv6PrivacyExtensions=kernel + +参考: + +- [NetworkManager](https://developer-old.gnome.org/NetworkManager/stable/NetworkManager.conf.html) +- [networkd.conf](https://www.freedesktop.org/software/systemd/man/latest/networkd.conf.html#IPv6PrivacyExtensions=) +- [systemd.network](https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html#IPv6PrivacyExtensions=) diff --git a/about.md b/about.md index 265663383..445192037 100644 --- a/about.md +++ b/about.md @@ -6,6 +6,8 @@ description: "业余爱好的点滴记录,同时作为配置备份的存储地
+- 2023 年 01 月 + - 逐步脱离 MacOS/iOS 生态 - 2016 年 02 月 - 升级 Jekyll 至 v3 以上,一些小修改 - 2015 年 04 月 @@ -14,12 +16,16 @@ description: "业余爱好的点滴记录,同时作为配置备份的存储地 - 放弃 JB,转为 Jekyll - 重新制作了模板 - 适配移动终端 +- 2013 年末 + - 生产环境切换至 OS X - 2013 年 09 月 - 域名切换到 Havee.me - 2009 年 03 月 - 建立博客,准备记录 - -05 年开始初步接触 Linux,06年开始工作环境完全切换到 Linux,13 年末,厌倦了 Linux,遂工作环境切换到 OS X,至今。好吧,其实就是前面七年屌丝生涯。本博客,业余的点滴记录,同时作为配置备份存储地,好记性不如滥笔头。 +- 2006年 + - 生产环境切换至 Linux +- 2005年 + - 接触 Linux 爱好:半桶水叮当响。