Собрать gnu coreutils

Собираем du с поддержкой статистики по inode-ам

26 Sep 2020


...

Зачем компилировать coreutils?

В gnu coreutils версии 8.22 программа du стала понимать парметр --inodes. С ним она показывает статисику по inode-ам вместо блоков (байтов). Changelog: https://savannah.gnu.org/forum/forum.php?forum_id=7815

Но если нужная версия почему-то недоступна в пакетах? Можно собрать из исходников.

Исходники

Архив с исходниками нужной версии скачиваем здесь: https://ftp.gnu.org/gnu/coreutils/

Исходники также можно взять из git-а (git://git.sv.gnu.org/coreutils), но их сборка не такая прямолинейная, как из релизного архива. Обсуждают например здесь: https://bug-coreutils.gnu.narkive.com/q14Ima4F/bug-32762-bug-at-coreutils-compile

Сборка (динамическая линковка)

Распаковать, пойти в каталог, запустить сборку:

$ tar -xf coreutils-8.32.tar.xz
$ cd coreutils-8.32
$ ./configure
$ make 

Готово:

$ file src/du
src/du: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=918968033d94f7add973fc78b395cef68c22b505, with debug_info, not stripped

Если при сборке жалуется на нехватку bison и чего-нибудь еще – устанавливать.

Сборка (статическая линковка)

Воркэраунд с библиотеками, обсуждается здесь: https://askubuntu.com/questions/530617/how-to-make-a-static-binary-of-coreutils

$ cd /usr/lib/gcc/x86_64-linux-gnu/(версия gcc)
$ sudo cp crtbeginT.o crtbeginT.orig.o
$ sudo cp crtbeginS.o crtbeginT.o

Распаковать, запустить сборку:

$ tar -xf coreutils-8.32.tar.xz
$ cd coreutils-8.32
$ ./configure
$ make SHARED=0 CFLAGS='-static -std=gnu99 -static-libgcc -static-libstdc++ -fPIC'

Параметры для статической сборки отсюда: http://eugene.taranov.me/2016/07/21/coreutils-static/

Готово:

$ file src/du
src/du: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.32, BuildID[sha1]=5d381c2ffd61cefca06303518f5d5f0d41d6a2bf, not stripped

Можно вернуть на место crtbeginT.orig.o.

Ссылки