おまぬけ活動日誌

最近のツッコまれどころ

この日誌から Google してもらう


2018年07月10日(Tue) ちょっと焦げ臭い [同日]

[vim] スタティックリンクされたvimをマルチバイト対応でビルドする (失敗編)

昨日の続き。 configureのオプションに--with-features=multi_byteを足したら、 たぶんリンクオプションに-lnslが加わって、 そこからgethostbyname(3)への参照ができていまいましたよ。

gcc   -static -L/usr/local/lib -Wl,--as-needed 	-o vim objects/arabic.o objects/beval.o objects/buffer.o objects/blowfish.o objects/crypt.o objects/crypt_zip.o objects/dict.o objects/diff.o objects/digraph.o objects/edit.o objects/eval.o objects/evalfunc.o objects/ex_cmds.o objects/ex_cmds2.o objects/ex_docmd.o objects/ex_eval.o objects/ex_getln.o objects/farsi.o objects/fileio.o objects/fold.o objects/getchar.o objects/hardcopy.o objects/hashtab.o  objects/if_cscope.o objects/if_xcmdsrv.o objects/list.o objects/mark.o objects/memline.o objects/menu.o objects/misc1.o objects/misc2.o objects/move.o objects/mbyte.o objects/normal.o objects/ops.o objects/option.o objects/os_unix.o objects/pathdef.o objects/popupmnu.o objects/pty.o objects/quickfix.o objects/regexp.o objects/screen.o objects/search.o objects/sha256.o objects/spell.o objects/spellfile.o objects/syntax.o objects/tag.o objects/term.o objects/terminal.o objects/ui.o objects/undo.o objects/userfunc.o objects/version.o objects/window.o             objects/channel.o  objects/charset.o objects/json.o objects/main.o objects/memfile.o objects/message.o        -lm -ltinfo -lnsl  -ldl           
objects/channel.o: In function `channel_open':
channel.c:(.text+0x4c7c): warning: Using 'gethostbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

configureのオプションに--with-features=multi_byteを足さない場合はこちら。

gcc   -static -L/usr/local/lib -Wl,--as-needed 	-o vim objects/arabic.o objects/beval.o objects/buffer.o objects/blowfish.o objects/crypt.o objects/crypt_zip.o objects/dict.o objects/diff.o objects/digraph.o objects/edit.o objects/eval.o objects/evalfunc.o objects/ex_cmds.o objects/ex_cmds2.o objects/ex_docmd.o objects/ex_eval.o objects/ex_getln.o objects/farsi.o objects/fileio.o objects/fold.o objects/getchar.o objects/hardcopy.o objects/hashtab.o  objects/if_cscope.o objects/if_xcmdsrv.o objects/list.o objects/mark.o objects/memline.o objects/menu.o objects/misc1.o objects/misc2.o objects/move.o objects/mbyte.o objects/normal.o objects/ops.o objects/option.o objects/os_unix.o objects/pathdef.o objects/popupmnu.o objects/pty.o objects/quickfix.o objects/regexp.o objects/screen.o objects/search.o objects/sha256.o objects/spell.o objects/spellfile.o objects/syntax.o objects/tag.o objects/term.o objects/terminal.o objects/ui.o objects/undo.o objects/userfunc.o objects/version.o objects/window.o               objects/charset.o objects/json.o objects/main.o objects/memfile.o objects/message.o        -lm -ltinfo  -ldl           

2018年07月09日(Mon) いい感じに曇り [同日]

[vim] スタティックリンクされたvimをビルドする

気軽にコピーしてきて起動できるvimが欲しくなった。

Statically (cross) compiled vim for x86, x86-64 and mipselericpruitt/static-glibc-vimを参考にさせてもらう。 後者によると、いくつかの関数はautoconfにまかせておくとglibcに依存してしまうのだそうで、ここでは下記のように、生成されたconfig.hを変更することでリストされている関数が依存しないようにしてみた。

まずソースコードをいただいてくる。執筆時点では、パッチは173まで進んでいた。

$ git clone https://github.com/vim/vim.git

Configureとビルド。LDFLAGS-staticにすることでスタティックリンクできるようだ。

$ cd vim
$ export LDFLAGS="-static"
$ export MAKEFLAGS="-j4"
$ export CFLAGS=""
$ ./configure --with-compiledby='zunda <zunda@freeshell.org>'  \
--with-features=small --with-x=no --disable-gui  --disable-netbeans \
--disable-pythoninterp  --disable-python3interp  --disable-rubyinterp \
--disable-luainterp
$ cat << UNDEFS >> src/auto/config.h
/* We don't want to use functions in glibc */
#undef HAVE_GETPWNAM
#undef HAVE_GETPWUID
#undef HAVE_GETPWENT
#undef HAVE_DLOPEN
UNDEFS
$ make

デバッグシンボルはいらないだろう。できあがったものを確認する。

$ strip src/vim
$ ls -lh src/vim
-rwxrwxr-x 1 zunda zunda 1.9M Jul  9 22:37 src/vim
$ src/vim --version | head -3
VIM - Vi IMproved 8.1 (2018 May 18, compiled Jul  9 2018 20:58:05)
Included patches: 1-173
Compiled by zunda <zunda@freeshell.org>
$ file ./src/vim
file ./src/vim
./src/vim: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, for GNU/Linux 3.2.0, BuildID[sha1]=3bbc73f8afb52166c44901c7cf6f2b2a37a5f61b, stripped
$ ldd !$
ldd ./src/vim
	not a dynamic executable

うまくいったようだ。下記の環境でASCII文字を編集できるのを確認した。NetBSDでも走るんだよ!

  • Cedar-10
  • Cedar-14
  • Heroku-16
  • NetBSD 8.0_RC1 amd64

下記の環境ではエラーが出た。まあしょうがない。

  • macOS 10.13.5: vim: cannot execute binary file

2018年07月01日(Sun) 火山ガスの匂いが少し [同日]

[tDiary] 最新に追随

やっとこ、testやdevelopment用のGemを入れなければネイティブなGemのビルドを避けられると気づいたのでした。

$ git clone git@github.com:zunda/tdiary-core.git
$ cd tdiary-core
$ git remote add upstream https://github.com/tdiary/tdiary-core.git
$ git fetch upstream
$ git rebase upstream/master
$ bundle23 install --path=vendor/bundle --without='test development'
$ git checkout zunda-local
$ git merge master

Gemfile.lockのコンフリクトを修正してGemfile.localを下記のように作成して

gem 'tdiary-style-emptdiary'

もういちどbundle install…するとtDiary 5.0.9がgemで入っちゃうな。

$ bundle23 install --path=vendor/bundle --without='test development'

tdiary-style-emptdiaryのことは一旦置いておいて、git commitしよう。

さて。tdiary/tdiary-style-emptdiaryはforkしてきてsymlinkしてみる。

$ git clone git@github.com:zunda/tdiary-style-emptdiary.git
$ cd tdiary-core/lib/tdiary/style
$ ln -s ../../../../tdiary-style-emptdiary/lib/tdiary/style/emptdiary.rb .

これでtdiary.rbのロード元を変更すれば日記が見えるはずだろうか。

えいっ! (このエントリが見えますように)

…というわけで、gitの管理外のtdiary.confでプラグインの参照先もcloneしてきたものにしたら閲覧できるようになりました。やったー!!

本日のツッコミ(全1件) [ツッコミを入れる]

> zunda [ツッコミのテストですと]


2018年06月24日(Sun) 火山ガスもくもく [同日]

[netbsd] NetBSD 8.0を2番目のハードディスクにインストールする

このホストでtDiaryの最新版を動かせるようにしたいのだけれど、bundle installでpthread関連のCプログラムがコンパイルできないので、手元でFreeshellと同じNetBSD 8.0 RC1を用意していろいろ試してみることにしました。結局問題は解決できなかったのだけど。

インストール先はDellの古いデスクトップです。BIOSのcopyrightは2010年から、ハードディスクはSATA接続で1本目にはUbuntu入っていてBIOSからgrub2が起動します。ここでは2本目のハードディスクにNetBSDをインストールします。USBメモリはブート時にはSCSIディスクとしてエミュレートされるみたい。グラフィックカードはNvidiaのものです。

インストール

$ sudo dd if=NetBSD-8.0_RC1-amd64-install.img of=/dev/sdb bs=2M

したUSBメモリを接続して、BIOSから選択して起動する。

インストーライメージのブートメニューが表示されたら

4. Drop to boot prompt
から
> userconf disable nouveau
> boot

する。(nouveauをdisableしないとドライバが初期化できない旨表示してOSが停止します。)これで、

NetBSD/amd64 (Amnesiac) (console)
login:

まで進むのでパスワードなしでrootでログインして、

$ /install.sh

を起動。ざくざく進めてくと

Status: Command failed
Command: /usr/sbin/installboot -o console=pc,speed=9600 /dev/rsd1a /isr/mdec/bootxx_ffsv2

installboot: Old BPB too big, use -f (may invalidate filesystem)
installboot: Set bootstrap operation failed

と表示されるので、再起動して4. Drop to boot promptから、-fオプションを追加して表示されたコマンド実行してから、インストーラを実行すると、インストールが進む。

設定

grub

Ubuntu側でgrubのメニューの設定をした

/etc/grub.d/40_customに下記を追加して、sudo update-grub2した。

Status: Command failed
menuentry "NetBSD" {
	insmod chain
	set root=(hd1,msdos1)
	drivemap -s hd0, hd1
	chainloader +1
}

named

ネームサーバを指定しないでホスト名がひけないのはnamedが動いてないからだった。そんなの居るのか!

/etc/rc.confに下記の行を追加した

named=YES

管理用ユーザー

# useradd -m -G wheel system
# passwd system

bash

~system/.shshに下記を追加

PKG_PATH="http://ftp.NetBSD.org/pub/pkgsrc/packages/NetBSD/amd64/8.0/All"
export PKG_PATH

パッケージをインストール

$ su
# pkg_add -v bash

常用ユーザー

# useradd -m -s /usr/pkg/bin/bash zunda
# passwd system

Ruby

http://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc/README-all.htmlにパッケージのリストがある。このホストと同じバージョンを入れるべきか。

faeroes:~> ruby23 --version
ruby 2.3.6p384 (2017-12-14 revision 61254) [x86_64-netbsd]
# pkg_add -v ruby23-2.3.6
pkg_add: no pkg found for 'ruby23-2.3.6', sorry.
pkg_add: 1 package addition failed

むーん。なかった。

# pkg_add -v ruby23-2.3.7
$ ruby23 --version
ruby 2.3.7p456 (2018-03-28 revision 63024) [x86_64-netbsd]

Git

# pkg_add -v git

tDiaryのための環境

bundler

$ gem23 install --user-install bundler

tDiary

$ ssh-keygen

して公開鍵をGitHubに追加した。

$ mkdir -p ~/src/github.com/zunda
$ cd ~/src/github.com/zunda
$ git clone git@github.com:zunda/tdiary-core.git
$ cd tdiary-core/
$ bundle install --path=vendor/bundle

これですんなりbundle installできるのでした。


作り手とその取り巻きだけが楽しんでる間は本物じゃない。その中身が理解できない人々の生活を変えてこそ本物だ


zunda <zunda at freeshell.org>