拾豆新闻
  • 文章列表
  • 联系我

文章列表

February 11, 2025

从 Pelican 到 Hugo:博客静态网站框架切换(一)

很久以前就用jekyll搞过博客,jekyll是github page文档默认的例子,但是是基于ruby的,因为我最主要学的是python,那时候找了一个python的静态网站生成框架叫pelican。但几年下来感觉不如一个go的静态网站框架hugo发展的好,pelican 大概是 12k 的 star,而 hugo 有 77k 多,所以想尝试一下看看能不能切换到hugo。

这次打算写两篇,第一篇关于初始化了hugo框架并且用python脚本将pelican的markdown文件转换成hugo的,并且在本地运行起来,第二片写如何用部github action部署到Github Pages,也对主题,中英文多语言等进行调整和优化。

除了github上的受欢迎程度,我也大致问了以下chatgpt——hugo和pelican对比的主要优缺点,这里简单赘述:

  • 构建速度极快(go的性能优势?)
  • 社区活跃,主题和插件都较为丰富
  • 多语言支持
  • 配置简单,只需要yaml和toml文件,不需要实际写go代码(相比较pelican需要写python代码)

我现在使用的环境是windows的wsl2的ubuntu,所以具体代码以此为例:

一:备份 Pelican 分支

确保备份 Pelican 的分支,避免意外丢失数据或者需要快速重新上线pelican的blog时候,可随时恢复到原先的状态。

git clone https://github.com/gccpacman/gccpacman.github.io
git checkout -b pelican
git push -u origin pelican

二:安装 Go语言

浏览器到go官网下载并安装golang:

cd Downloads
sudo su -
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.23.6.linux-amd64.tar.gz

编辑.zprofile加入环境变量 (因为我用的zsh):

# golang
export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin

三:安装hugo

ubuntu其实可以用apt或者snap安装,但我想要用最新的版本,就用go来安装了:

go install github.com/gohugoio/hugo@latest

安装完成后验证:

hugo version

四:创建hugo必要的文件

如果是一个新项目,按照Hugo官方文档安装完成 Hugo 后应该执行:

April 6, 2022

编译Linux From Scrach(LFS) --(2)下载LFS相关的源码并从创建目录和用户

按照文档里的链接,每行一个链接的方法,创建wget-list-sysv和needed-patches-list,源码我放在我的github仓库: https://github.com/gccpacman/LFS-ubuntu2204

0) 假设已经完成了LFS(1)的步骤 – 宿主机分区,设置LFS环境变量等

1) 在$LFS/sources/目录下,创建wget-list-sysv,执行以下命令批量下载源代码tar包


# wget-list-sysv
wget --input-file=wget-list-sysv --continue --directory-prefix=$LFS/sources

2)在$LFS/sources/patches目录下,创建needed-patches-list,执行以下命令批量下载源代码tar包


# needed-patches-list
wget --input-file=needed-patches-list --continue --directory-prefix=$LFS/sources/patches

3) 创建基本LFS Linux目录结构


mkdir -pv $LFS/{etc,var} $LFS/usr/{bin,lib,sbin}
for i in bin lib sbin; do
  ln -sv usr/$i $LFS/$i
done
case $(uname -m) in
  x86_64) mkdir -pv $LFS/lib64 ;;
esac

mkdir -pv $LFS/tools

4) 创建LFS宿主机用户, 并且将$LFS下的目录chown给lfs用户


groupadd lfs
useradd -s /bin/bash -g lfs -m -k /dev/null lfs
passwd lfs
# enter passwords for lfs user

# grant lfs $LFS directory permission
chown -v lfs $LFS/{usr{,/*},lib,var,etc,bin,sbin,tools}
case $(uname -m) in
  x86_64) chown -v lfs $LFS/lib64 ;;
esac

5) 初始化lfs用户的bashrc和bash_profile, 添加LFS, LFS_TGT等环境变量


cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF

cat > ~/.bashrc << "EOF"
set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
LFS_TGT=$(uname -m)-lfs-linux-gnu 
PATH=/usr/bin
if [ ! -L /bin ]; then PATH=/bin:$PATH; fi 
PATH=$LFS/tools/bin:$PATH 
CONFIG_SITE=$LFS/usr/share/config.site 
export LFS LC_ALL LFS_TGT PATH CONFIG_SITE 
EOF
April 6, 2022

编译Linux From Scrach(LFS) --(1)准备编译linux主机环境和磁盘分区

大概一年多以前看到了一个项目叫做Linux From Scrach,大致意思就是现在有无数的Linux发行版,但是最好的发行版就是你自己编译的。我倒是没有打算真的用自己编译的发行版,但是既然有时间就不妨看看能不能编译出来。于是下载了官方指导LFS安装的stable版本的PDF(https://www.linuxfromscratch.org/lfs/downloads/stable/),打算尝试看看。

0) 准备一台linux操作系统的主机

之前已经在自己的一台台式主机上安装了Ubuntu22.04 Desktop,打算以此作为LFS的编译环境。毕竟是裸金属的机器,有i7和固态硬盘加持,编译的效率应该就不用担心了。

1) 在ubuntu22.04主机根据LFS文档安装了缺失的编译依赖环境

sudo apt install qemu-system-x86
sudo apt install binutils
sudo apt install bison
sudo apt install coreutils
sudo apt install findutils
sudo apt install gcc
sudo apt install build-essential 
sudo apt install m4
sudo apt install patch
sudo apt install perl
sudo apt install texinfo
sudo apt install xz
sudo apt install gawk

2) 确认是否正确安装所有依赖version_check.sh

#!/bin/bash
# Simple script to list version numbers of critical development tools
export LC_ALL=C
bash --version | head -n1 | cut -d" " -f2-4
MYSH=$(readlink -f /bin/sh)
echo "/bin/sh -> $MYSH"
echo $MYSH | grep -q bash || echo "ERROR: /bin/sh does not point to bash"
unset MYSH
echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-
bison --version | head -n1
if [ -h /usr/bin/yacc ]; then
  echo "/usr/bin/yacc -> `readlink -f /usr/bin/yacc`";
elif [ -x /usr/bin/yacc ]; then
  echo yacc is `/usr/bin/yacc --version | head -n1`
else
  echo "yacc not found"
fi
echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2
diff --version | head -n1
find --version | head -n1
gawk --version | head -n1
if [ -h /usr/bin/awk ]; then
  echo "/usr/bin/awk -> `readlink -f /usr/bin/awk`";
elif [ -x /usr/bin/awk ]; then
  echo awk is `/usr/bin/awk --version | head -n1`
else
  echo "awk not found"
fi
gcc --version | head -n1
g++ --version | head -n1
grep --version | head -n1
gzip --version | head -n1
cat /proc/version
m4 --version | head -n1
make --version | head -n1
patch --version | head -n1
echo Perl `perl -V:version`
python3 --version
sed --version | head -n1
tar --version | head -n1
makeinfo --version | head -n1  # texinfo version
xz --version | head -n1
echo 'int main(){}' > dummy.c && g++ -o dummy dummy.c
if [ -x dummy ]
  then echo "g++ compilation OK";
else 
  echo "g++ compilation failed"; 
fi 
rm -f dummy.c dummy

输出:

  • ««
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
  • »»
© 拾豆新闻 2025