natsukodachi

Hugoメモ

ubuntuを(ぶっ壊して)新しく入れなおす度にHugoのインストールのやり方が分からなくなるので残しておく。別PCで再クローンするときにも使えると思う。それと全然ブログ書かないせいでデプロイとかgit submoduleとか忘れちゃうから……。

Hugoのインストール

いつものsudo apt install hugoだと最新版を持ってこれない。

  1. Githubから最新のリリースを持ってくる。X_86なのでamd64を選ぶ.scssを使いたいならextentedがついているものにする。
1wget https://github.com/gohugoio/hugo/releases/download/v0.140.2/hugo_extended_0.140.2_linux-amd64.deb
  1. debもaptでインストールができる。./を付ける必要があることに注意。(./を付けないとパッケージ一覧から探してしまい、ローカルのdebファイルを見つけられない。)
1//これはだめ
2sudo apt install hugo_extended_0.137.1_linux-amd64.deb
3//これはいい
4sudo apt install ./hugo_extended_0.137.1_linux-amd64.deb

インストール中に表示されるテキストの最後に,

1N: Download is performed unsandboxed as root as file '/home/suedmond/hugo_extended_0.140.2_linux-amd64.deb' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)

とあるが無視してよいらしい。 hugo versionで最新verがインストールされていることが確認できる。

サイト記事のリポジトリを復活させる

このサイトは記事の内容が乗っているBlogリポジトリ(Private)とGithub pagesでホスティングするnatsukodachi.github.ioリポジトリ(Global)の二つから構成されている。

Github Pagesとsubmoduleの連動のやり方は忘れてしまった……なんか面倒だった……ので既存のブログの編集環境を整えるやり方だけ書いておく。

Blogリポジトリをcloneしてくる。(これはPrivateリポジトリなのでコピペしてもはじかれます.)

1 git clone https://github.com/natsukodachi/blog.git

これだとsubmodule(githubpageとテーマ)が空っぽだから、これもcloneする。

1git submodule update --init --recursive
2Submodule 'docs' (https://github.com/natsukodachi/natsukodachi.github.io.git) registered for path 'docs'
3Submodule 'themes/hugo-bearblog' (https://github.com/janraasch/hugo-bearblog.git) registered for path 'themes/hugo-bearblog'
4Cloning into '/home/natsukodachi/works/blog/docs'...
5Cloning into '/home/natsukodachi/works/blog/themes/hugo-bearblog'...
6Submodule path 'docs': checked out 'c273210c34c95cff1cde2995b79fc7ac729fc1d8'
7Submodule path 'themes/hugo-bearblog': checked out '0b64d5ad103c716da5a79b48855f1489f6738ba7'

でこのサブモジュールは追加時の状態で、テーマの更新は反映されてないから、更新する。

1git submodule update --remote
2Submodule path 'themes/hugo-bearblog': checked out 'c541ece2bd1f5ce0786f6bb01ee99be6e25f23b5'

hugoは更新で結構変わるので、仕様に合わせてhugo.tomlをいじる。(C++なんて3年に1回しか変わらないのに……)

blogの中はこんな感じ。

 1$ tree
 2├── archetypes
 3│   └── [default.md](http://default.md/)
 4├── content
 5│   ├── _index.md
 6│   ├── [about.md](http://about.md/)
 7│   ├── blog
 8│   │   ├── _index.md
 9│   │   └── [test.md](http://test.md/)
10│   └── works
11│       └── [wowork.md](http://wowork.md/)
12├── [deploy.sh](http://deploy.sh/)
13├── docs←サブモジュール1
14│   ├── about
15│   │   └── index.html
1617├── hugo.toml
18│   themes←サブモジュール2
19│   │  
20└── 

記事書いたらdocs内でコミット&プルして、そのあとルート(ブログ)でコミット&プルする。

docs内での操作をやってくれるのがdeploy.sh。

 1#!/bin/sh
 2
 3# If a command fails then the deploy stops
 4set -e
 5
 6printf "\033[0;32mDeploying updates to GitHub...\033[0m\n"
 7
 8# Build the project.
 9hugo # if using a theme, replace with `hugo -t <YOURTHEME>`
10
11# Go To Public folder
12#cd public
13cd docs
14
15# Add changes to git.
16git add .
17
18# Commit changes.
19msg="rebuilding site $(date)"
20if [ -n "$*" ]; then
21        msg="$*"
22fi
23git commit -m "$msg"
24
25# Push source and build repos.
26git push origin main

エラー

一番よく見るのがサブモジュールのエラー。

1'hoge/hoge' already exists in the index

これが起きるのはcloneした時にサブモジュールのディレクトリが空っぽなのを見てgit add submoduleしようとするからだ。だってリポジトリにはもう追加されているのだから。前述したgit submodule update –init –recursiveをするか、clone時にgit clone –recursive (リポジトリ)をするのがいい。

そうではなく、git addしなおしたいならこうする。

  1. git submodule update –init
  2. これで無理なら.gitmoduleからこのサブモジュールを消す
  3. git submodule add (gitのパス) (追加するdir)
  4. これで無理ならgit rm -r –cached (追加したdir/dir)
  5. git submodule add (gitのパス) (追加するdir)

これで無理ならcloneしなおしたほうがいい。

notionのおかげでスマホで書いたメモをPCに張り付けて投稿できるかららくちん。

#Hugo