日遇三险II
Time: 2021-09-06 Tags: lifeLink: 日遇三险II
本文仅代表个人观点。如有冒犯,请直接开骂。
因何而起
2021 年夏季学期,由于没什么事干,本人准备在没什么事的时候进行一波博客框架的更换,顺便让自己的博客主题能够自主可控。前几天开始进行此事的筹划。终于在调查了一圈之后选择了原框架(
至于为什么不肯放弃 jekyll,那必然是自己不想从头对一个复杂的博客框架进行学习。平时对 PWN 题目的逆向就够我受的了,现在再去看这些不可名状的代码,想都不要想。
所以这一个博客改造计划便开始了。
大刀阔斧
首先推一下主题作者的原主题 jekyll-theme-WuK。之所以我选择这一个主题,是因为这一主题从字体、背景等设置上更加偏向于国人的习惯,阅读起来更加舒适。至少我不会去强行选一个英语系开发者写的办公风主题。
但是这套主题经过 那个男人 的 批评,以及我读完《写给大家看的设计书》之后的自我审视后,愈发感觉需要调整。
主页
首先就是主页。这个是最能体现诟病的一处。
事件一:朋辈导生尴尬时刻。本人写过选课相关的文章。在推荐给新生之后,新生返回主页,在 home 找了半天没找到文章在哪里。
事件二:B 哥的批评。B 哥说我网站很乱。我问他哪里乱,他说哪里都乱。
事件三:那个男人的批评。大概就是说,你们这些年轻人,整天花里胡哨的。你这博客都能做 PPT 了。
为了解决这些,干脆直接把主页设置成单入口。因此只留下了博客的大标题,以及一个大大的 ————>QuickStart<————
按钮,链接到 /tags/
。这样既保留了主页的展示功能(让你知道 👴 是 👴 而不是其他的 👴 ),又能保持网站的简洁性。
标签和归档
在我使用的版本,标签和归档页面前面的字体是不对齐的。如果文章少还影响不大,文章一旦变多,前面的时间栏就 犬牙差互,斗折蛇行,严重影响观感。
CSS 中对 font-family
的解析是按照你书写的顺序来的。
for i in font_family:
if i.exist():
i.screen_print()
break
所以一定是因为某一个非等宽字体被放到了前面。
... {
font-family: PingFang SC, Menlo, Monaco, "Courier New", Microsoft JhengHei, monospace;
}
这样直接三个苹果字体甩到脸上,windows 直接忽略。肯定是不行的。我直接选择把三个等宽英文字体甩脸,这样能直接把英文全吃掉。
无意义的统计信息
本主题原来的文章开头有发表时间、对字数的统计、和按照阅读习惯对字数转换成的阅读时间、使用的 license 以及 打赏链接。
对于多种主题博客进行考察之后,发现有很少人会把过多的信息放到最上面,甚至有人只放一个标题。于是将 license 和 链接 放到了文章的最后面,紧跟着评论。这样既不影响阅读,也不失他的作用。
TODO
admonition
,这是我一直想做的。大概像下面这样
这是一个 success,log.success(“libc_base = “+hex(libc_base))
这是一个 info,context.log_level = ‘info’
这是一个 warning,黄灯亮了等一等
这是一个 error,但是没有出错
这一部分我一直想加到博客中。用过 pwntools 的选手应该有感触。用 info(hex(address))
和用 print(hex(address))
的区别还是很大的吧。你是想用 print
打印出一个不起眼的地址,还是用一个 [+]
来表示出你泄露出 libc 地址的喜悦?
然而,做这个直接让我的博客下线了整整半天。
对比 Python-Markdown 这门方言,显然 kramdown 对 admonition 的支持比较差,需要自己定制一个。
首先被我发现有这个特性的是 nshipster.com 这个项目。显然,此项目使用 _plugins
下的 admonition-block.rb
进行了插件安装,注册了 info warning error 三个 liquid 标签。当要在 markdown 中使用时,只需要用 {% info %} 这样的标签进行包裹文本,对应的文本就会在渲染时被加上 <div class="admonition info">
。对应的 scss 文件在此时对这个 class 进行渲染,就可以得到 admonition 了。
但是这有一个问题,那就是如何注册标签。
# frozen_string_literal: true
module Jekyll
class AdmonitionBlock < Liquid::Block
def initialize(tag_name, arguments, tokens)
super
@type = tag_name
end
def render(context)
content = super
<<~EOD
<aside class="admonition #{@type}" markdown="1">
#{content}
</aside>
EOD
end
end
end
Liquid::Template.register_tag('info', Jekyll::AdmonitionBlock)
Liquid::Template.register_tag('error', Jekyll::AdmonitionBlock)
Liquid::Template.register_tag('warning', Jekyll::AdmonitionBlock)
Liquid::Template.register_tag('success', Jekyll::AdmonitionBlock)
这是我改写之后的版本,注册标签,让这个标签包裹的文本在渲染时被套上 <aside class="admonition #{@type}">
这样的标签。
但是在 jekyllcn.com 相关文档中提到了:
GitHub Pages 是由 Jekyll 提供技术支持的,考虑到安全因素,所有的 Pages 通过 –safe 选项禁用了插件功能,因此如果你的网站部署在 Github Pages ,那么你的插件不会工作。 不过仍然有办法发布到 GitHub Pages,你只需在本地做一些转换,并把生成好的文件上传到 Github 替代 Jekyll 就可以了。
这就意味着我需要把 jekyll build 生成的 _site 复制到 git 里面然后 push 到 github 上。相当于把 github pages 原生支持变成了第三方。
这倒是也不麻烦。很多 github pages 用户都是第三方主题。
于是把插件安装到 _plugins
目录。直接进行 jekyll build
。报错。
jekyll 3.9.0 | Error: Liquid syntax error (line 86): Unknown tag ‘info’
也就是说我的标签就根本没有被注册成功。于是我想起来 jekyll 文档里面的 所有的 Pages 通过 --safe 选项禁用了插件功能
。怀疑是不是本地配置就是 github-pages
的配置。
#gem "jekyll", "~> 4.1.1"
# This is the default theme for new Jekyll sites. You may change this to anything you like.
#gem "minima", "~> 2.5"
# If you want to use GitHub Pages, remove the "gem "jekyll"" above and
# uncomment the line below. To upgrade, run `bundle update github-pages`.
gem "github-pages", group: :jekyll_plugins
果然。把上面两个 gem 注释去掉之后再次 build,成功。
崩溃
把 _site
目录下的所有文件 push 到 github repo,Environments 也正常启动了,上述的诸多改动也显示正常。但是在点进一篇文章时出现了错误。
本以为文章访问是正常的,但显示的却是 这个页面。
猜想一:目录不对。查看 _site
目录下有各个文章的文件夹,文件夹下有 index.html
,但是从标签或者归档页面下访问的 url 没有 index.html
。但是加上以后也不好使。 查看 github repo,发现文件夹名称带下划线前缀的都不可见。因此建立 posts 文件夹,放进去,不好使。怀疑直接加文章名可以,尝试,失败。
猜想二:所有页面直接导向 404.html。直接证明这个猜想是错误的。只有文章导向了 404,tags 等页面仍然正常。我直接把 404 给🐏️了都不好使。
猜想三:还是目录不对。一开始拿 nmap 扫了一下,但是我不知道 nmap 是干啥的,随便扫了一下也不知道啥意思。然后咨询 aidai,他建议写个 shell 进去看看博客的目录,但是我怕被🐏️掉。最后想用 actions 定制一个 docker 指令来定向目录来部署。最后发现这玩意根本就不是用来部署的。
面对着一个 404 页面,我陷入了迷茫。
我是谁?
我在干什么?
我为什么要写博客?
ruby 怎么还不倒闭?
到现在已经完全麻了。
此时有两个选择,一个是把版本回退,无事发生;另一个是换个思路,重新来过。
在我即将考虑回退之时,我,看到了 kramdown。
文档里面有这么一段:
Here are some examples for block IALs:
A simple paragraph with an ID attribute.
{: #para-one}
> A blockquote with a title
{:title="The blockquote title"}
{: #myid}
{:.ruby}
Some code here
意思是我可以通过添加 { } 的方法对网页标签加 class。也就是说,我可以通过 markdown 将此问题转化为 css 的问题。
这简单,直接一个 <link>
把 css 给引入就完事了。想法成立,实践。
jekyll 原生支持 sass,于是建立一个 _sass
,里面放 scss 文件。然后在 css 文件夹,只把上述文件 import 一下,head 引入。再写一个 test。成功。
test
本地测试成功。既然没有用到插件,那么 github pages 应该也好使。直接整个文件夹复制过来,git push,成功。
👴 的博客从好使到大刀阔斧到崩了再到好使,几乎把整个博客代码看了一遍,用自我定制的方法对博客实现了自主可控。
妥协
接上回……
ProductName: macOS,ProductVersion: 11.4
今年年初之时,本人电脑出现了指纹解锁失败的情况。之后经过多次调查,真实情况是某个驱动无缘无故进行无限制 fork,把内存跑炸了。如上的 info 信息,本人在上次日遇三险之后忍受不了密码解锁的麻烦。选择了向系统妥协,将自己的 mac 升级到了 macOS Bug Sur。