Configure error the geoip2 module requires the maxminddb library

Планирую в новогодние праздники обновить ПО сервера, которое не обновлял года 3. Специалист я уровня - ставлю все по гайдикам с тЫрнета...

Что-то у меня проблемы с установкой. Вот что сделал.

1. Установил Nginx через https://github.com/angristan/nginx-autoinstall

2. скачал эту же версию nginx перешел в его папку и попробовал сделать

./configure --add-module=/tmp/ngx_http_geoip2_module $(nginx -V)

получил ошибку

./configure: error: the geoip2 module requires the maxminddb library.

3. Нашел в сети эту подсказку и сделал

git clone --recursive https://github.com/maxmind/libmaxminddb
cd libmaxminddb
./bootstrap
./configure
make
make install

4. Снова ./configure —add-module=/tmp/ngx_http_geoip2_module $(nginx -V)  и теперь все ок

5. Далее 

make
make install

и вроде бы все тоже норм собралось. 

Перезапускаю Nginx, смотрю его конфигурацию, а geoip2 там нет. как так?


root@hel:/# nginx -V
nginx version: nginx/1.22.0
built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
built with OpenSSL 1.1.1 (compatible; BoringSSL) (running with BoringSSL)
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --user=nginx --group=nginx --with-cc-opt=-Wno-deprecated-declarations --with-cc-opt=-Wno-ignored-qualifiers --with-openssl=/usr/local/src/nginx/modules/quiche/quiche/deps/boringssl --with-quiche=/usr/local/src/nginx/modules/quiche --with-threads --with-file-aio --with-http_ssl_module --with-http_v2_module --with-http_mp4_module --with-http_auth_request_module --with-http_slice_module --with-http_stub_status_module --with-http_realip_module --with-http_sub_module --add-module=/usr/local/src/nginx/modules/ngx_brotli --with-http_v3_module

1

При установке nginx штатными средствами ОС в Linux (apt, aptitude, yum, dnf) нет возможности сконфигурировать его установку, чтобы добавить или убрать какие-либо модули и nginx устанавливается «как есть».

Что же делать, если нам необходимо добавить какой-либо модуль? Правильно, нужно пересобрать nginx вручную. О том, как это правильно сделать в Linux, рассказываем в статье.

Добавление модулей nginx в Linux (Debian/Ubuntu/CentOS/AlmaLinux)

Предположим, для примера, что нам необходимо добавить в nginx модуль http_mp4_module. Вывод команды nginx -V покажет нам, что nginx собран без него.

nginx -V

Результат:

nginx version: nginx/1.18.0 (Ubuntu)
built with OpenSSL 1.1.1f  31 Mar 2020
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2 -fdebug-prefix-map=/build/nginx-lUTckl/nginx-1.18.0=. 
-fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time 
-D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -fPIC' 
--prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log 
--error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid 
--modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body 
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy 
--http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug 
--with-compat --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module 
--with-http_realip_module --with-http_auth_request_module --with-http_v2_module 
--with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module 
--with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic 
--with-http_sub_module --with-http_xslt_module=dynamic --with-stream=dynamic 
--with-stream_ssl_module --with-mail=dynamic --with-mail_ssl_module

Сохраним вывод команды nginx -V в какой-нибудь текстовый редактор — эта информация нам пригодится при конфигурировании. Видим, что версия nginx у нас установлена 1.18.0 — скачиваем такую же версию:

wget http://nginx.org/download/nginx-1.18.0.tar.gz

Распакуем архив и перейдём в папку nginx-1.18.0:

tar -xvf nginx-1.18.0.tar.gz
cd nginx-1.18.0

Далее для сборки нам потребуется установить в систему дополнительные пакеты.

Для Debian/Ubuntu выполняем:

apt install build-essential 

После предложения продолжить установку — Do you want to continue? [Y/n] — нажимаем Y.

Для CentOS/AlmaLinux выполняем:

yum install gcc gcc-c++ kernel-devel
yum groupinstall 'Development Tools'

После предложения продолжить установку — Is this ok [y/d/N] — нажимаем y.

После установки пакетов приступаем к конфигурированию nginx с добавлением модуля http_mp4_module.

Для этого копируем из текстового редактора вывод команды nginx -V, начиная с —prefix= и до первого —add-module= (все присутствующие в выводе —add_module= нам не нужны). После чего пишем в консоли ./configure и вставляем скопированное из редактора. В нашем случае есть вывод:

--add-dynamic-module=/build/nginx-d8gVax/nginx-1.18.0/debian/modules/http-geoip2

поэтому просто копируем все, кроме этой строки.

В конец строки добавляем —with-http_mp4_module чтобы получилось так:

./configure --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf 
--http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log 
--lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules 
--http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi 
--http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi 
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-compat --with-pcre-jit 
--with-http_ssl_module --with-http_stub_status_module --with-http_realip_module 
--with-http_auth_request_module --with-http_v2_module --with-http_dav_module 
--with-http_slice_module --with-threads --with-http_addition_module --with-http_gunzip_module 
--with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_sub_module 
--with-http_xslt_module=dynamic --with-stream=dynamic --with-stream_ssl_module 
--with-mail=dynamic --with-mail_ssl_module --with-http_mp4_module

Нажимаем Enter и ждём окончания процесса.

В процессе конфигурирования возможно будут появляться ошибки. Способы их устранения описаны ниже.

Ошибка:

./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.

Для Debian/Ubuntu исправляется установкой libpcre++-dev:

apt install libpcre++-dev

Для CentOS/AlmaLinux исправляется установкой pcre-devel:

yum install pcre-devel

Ошибка:

./configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using --with-openssl=<path> option.

Для Debian/Ubuntu:

apt install libssl-dev

Для CentOS/AlmaLinux:

yum install openssl-devel 

Ошибка:

./configure: error: the GeoIP module requires the GeoIP library.
You can either do not enable the module or install the library.

Для Debian/Ubuntu:

apt install libgeoip-dev

Для CentOS/AlmaLinux:

yum install GeoIP-devel

Ошибка:

./configure: error: the HTTP XSLT module requires the libxml2/libxslt
libraries. You can either do not enable the module or install the libraries.

Для Debian/Ubuntu:

apt install libxslt1-dev

Для CentOS/AlmaLinux:

yum install libxslt-devel

Ошибка:

./configure: error: the HTTP gzip module requires the zlib library
You can either do not enable the module or install the libraries.

Для Debian/Ubuntu:

apt install zlib1g-dev

Для CentOS/AlmaLinux:

yum install zlib-devel

Ошибка:

./configure: error: the HTTP image filter module requires the GD library.
You can either do not enable the module or install the libraries.

Для Debian/Ubuntu:

apt install libgd-dev

Для CentOS/AlmaLinux:

yum install gd gd-devel

Каждый раз после apt install или yum install недостающего пакета запускаем заново.

./configure --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf 
--http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log 
--lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules 
--http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi 
--http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi 
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-compat --with-debug --with-pcre-jit 
--with-http_ssl_module --with-http_stub_status_module --with-http_realip_module 
--with-http_auth_request_module --with-http_v2_module --with-http_dav_module 
--with-http_slice_module --with-threads --with-http_addition_module --with-http_gunzip_module 
--with-http_gzip_static_module --with-http_sub_module --with-http_mp4_module

После успешного окончания конфигурирования увидим на экране что-то вроде:

Configuration summary
  + using threads
  + using system PCRE library
  + using system OpenSSL library
  + using system zlib library

  nginx path prefix: "/usr/share/nginx"
  nginx binary file: "/usr/share/nginx/sbin/nginx"
  nginx modules path: "/usr/lib/nginx/modules"
  nginx configuration prefix: "/etc/nginx"
  nginx configuration file: "/etc/nginx/nginx.conf"
  nginx pid file: "/run/nginx.pid"
  nginx error log file: "/var/log/nginx/error.log"
  nginx http access log file: "/var/log/nginx/access.log"
  nginx http client request body temporary files: "/var/lib/nginx/body"
  nginx http proxy temporary files: "/var/lib/nginx/proxy"
  nginx http fastcgi temporary files: "/var/lib/nginx/fastcgi"
  nginx http uwsgi temporary files: "/var/lib/nginx/uwsgi"
  nginx http scgi temporary files: "/var/lib/nginx/scgi"

Теперь можно собрать бинарник nginx — выполняем 2 команды:

make
make install

По окончании сборки проверяем, что nginx собрался с нужным нам модулем:

/usr/share/nginx/sbin/nginx -V

Результат:

nginx version: nginx/1.18.0
built by gcc 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
built with OpenSSL 1.1.1f  31 Mar 2020
TLS SNI support enabled
configure arguments: --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf 
--http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log 
--lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules 
--http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi 
--http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi 
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-compat --with-pcre-jit 
--with-http_ssl_module --with-http_stub_status_module --with-http_realip_module 
--with-http_auth_request_module --with-http_v2_module --with-http_dav_module 
--with-http_slice_module --with-threads --with-http_addition_module --with-http_gunzip_module 
--with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_sub_module 
--with-http_xslt_module=dynamic --with-stream=dynamic --with-stream_ssl_module 
--with-mail=dynamic --with-mail_ssl_module --with-http_mp4_module

Как видим, --with-http_mp4_module в выводе команды присутствует — всё получилось. Осталось заменить текущий бинарник nginx новым, который мы только что собрали.

Останавливаем nginx:

systemctl stop nginx

Переименовываем (на всякий случай) текущий nginx в nginx_back:

mv /usr/sbin/nginx /usr/sbin/nginx_back

Перемещаем на его место новый собраный бинарник:

mv /usr/share/nginx/sbin/nginx /usr/sbin/nginx

Удаляем ненужную больше папку /etc/nginx/sbin:

rm -Rf /usr/share/nginx/sbin

Проверяем ещё раз, что nginx у нас теперь тот, что нужно:

nginx -V

Результат:

nginx version: nginx/1.18.0
built by gcc 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
built with OpenSSL 1.1.1f  31 Mar 2020
TLS SNI support enabled
configure arguments: --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf 
--http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log 
--lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules 
--http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi 
--http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi 
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-compat --with-pcre-jit 
--with-http_ssl_module --with-http_stub_status_module --with-http_realip_module 
--with-http_auth_request_module --with-http_v2_module --with-http_dav_module 
--with-http_slice_module --with-threads --with-http_addition_module --with-http_gunzip_module 
--with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_sub_module 
--with-http_xslt_module=dynamic --with-stream=dynamic --with-stream_ssl_module 
--with-mail=dynamic --with-mail_ssl_module --with-http_mp4_module

Запускаем nginx:

systemctl start nginx

Удаляем ненужную больше папку и архив nginx-1.8.1:

cd ../
rm -Rf nginx-1.18.0/
rm -Rf nginx-1.18.0.tar.gz

Recommend Projects

  • React photo

    React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo

    Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo

    Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo

    TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo

    Django

    The Web framework for perfectionists with deadlines.

  • Laravel photo

    Laravel

    A PHP framework for web artisans

  • D3 photo

    D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Visualization

    Some thing interesting about visualization, use data art

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo

    Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo

    Microsoft

    Open source projects and samples from Microsoft.

  • Google photo

    Google

    Google ❤️ Open Source for everyone.

  • Alibaba photo

    Alibaba

    Alibaba Open Source for everyone

  • D3 photo

    D3

    Data-Driven Documents codes.

  • Tencent photo

    Tencent

    China tencent open source team.

eko

Geoip2 module requires the maxminddb library

Hi @leev or everyone,

I’m trying to re-compile nginx with this ngx_http_geoip2_module.

I’m trying to run the following command:

$ sudo ./configure --add-module=/opt/nginx/ngx_http_geoip2_module

but it fails on checking the Maxmind library with this output:

[...]
configuring additional modules
adding module in /opt/nginx/ngx_http_geoip2_module
checking for MaxmindDB library ... not found
./configure: error: the geoip2 module requires the maxminddb library.

As I always read the documentation, I’ve of course installed the libmaxminddb before and it seems to be available:

$ sudo ldconfig -p | grep maxmind
    libmaxminddb.so.0 (libc6,x86-64) => /usr/local/lib/libmaxminddb.so.0
    libmaxminddb.so (libc6,x86-64) => /usr/local/lib/libmaxminddb.so

Do you have any suggestion to help me installing it, please?

Thank you!

eko

Hi @leev, do you have any update on this issue please?

leev

The only other time this has been reported is with #10, but otherwise I’m not sure sorry.

eko

Thank you for your answer. After investigating, it looks like this is due to nginx 1.2.1 (default in Debian 7).

I’ve downloaded nginx 1.6.2 and it compiles like a charm.

I close this issue as I think you do not plan to support old nginx versions. Feel free to reopen :)

pkiula

This still happens with 1.18.0 as of today. libmaxminddb etc are installed:

sudo ldconfig -p | grep maxmind
	libmaxminddb.so.0 (libc6,x86-64) => /lib64/libmaxminddb.so.0

Any suggestions? Fedora 33.

daflip

Also experienced the same issue on debian buster. It seems the libmaxminddb0 package on debian is missing maxminddb.h and maxminddb_config.h which this software requires. The configuration script tests for maxmind by trying to include the header file and trying to compile whilst linking against maxminddb. make sure your maxmind configuration is good, you can test by creating this two line c file:

#include <maxminddb.h>
void main() { }

then verify it compiles using: gcc maxmindtest.c -o maxmindtest -l maxminddb .. if it does your compilation of the nginx geoip2 module should be OK (at least maxmind wise).

I ended up grabbing the maxmind header files from the maxmind git repo:

wget -O /usr/include/maxminddb.h https://raw.githubusercontent.com/maxmind/libmaxminddb/main/include/maxminddb.h
wget -O /usr/include/maxminddb_config.h https://raw.githubusercontent.com/maxmind/libmaxminddb/main/include/maxminddb_config.h.in

after this it builds me the module .. hope this helps somebody :)

Существует несколько способов отключения эффекта Ctrl + C :

  • Измените настройку терминала, чтобы она не генерировала сигнал.
  • Заблокируйте сигнал, чтобы он был сохранен на более позднюю доставку, когда сигнал становится разблокированным.
  • Игнорируйте сигнал или установите обработчик для него.
  • Запустите подпроцессы в фоновой группе процессов.

Так как вы хотите обнаружить, что CTRL + C был нажат, игнорируя сигнал выключен. Вы можете изменить настройки терминала, но вам нужно будет написать пользовательский код обработки ключа. Оболочки не обеспечивают доступ к блокировку сигналов.

Вы можете, однако, вы можете автоматически изолировать подпроцессы от приема сигнала, запустив их в отдельной группе процесса. Интерактивные оболочки запускают фоновые команды в отдельной группе процессов по умолчанию, но не интерактивные оболочки выполняют их в той же группе процессов, и все процессы в группе процесса переднего плана получают сигнал от терминальных событий. Чтобы сообщить оболочку на запускать фоновые задания в отдельной группе процессов, запустить SET -M . Бег Setsid Ping ... является еще одним способом форсирования Ping для запуска в отдельной группе процесса.

set -m
interrupted=
trap 'echo Interrupted, but ping may still be running' INT
set -m
ping … &
while wait; [ $? -ge 128 ]; do echo "Waiting for background jobs"; done
echo ping has finished

Если вы хотите Ctrl + Z , чтобы приостановить фоновую группу процессов, вам нужно будет распространять сигнал от оболочки.

Контролирующие сигналы тонко являются немного растягивающейся для скрипта оболочки, а раковины, отличные от att ksh, как правило, имеют немного багги, когда вы достигаете угловых случаев, поэтому рассмотрите язык, который дает вам больше контроля, такого как Perl, Python или рубиновый

06.10.2014, 14:53

Ссылка

2 ответа

Всем, у кого возникла эта проблема, вот решение:

  1. git clone —рекурсивныйhttps://github.com/maxmind/libmaxminddb
  2. компакт-диск libmaxminddb
  3. ./начальная загрузка
  4. ./настроить
  5. делать
  6. выполнить установку

Я заметил, что изначально после клонирования не было исполняемого файла configure, но после запуска./bootstrap он был создан . Затем я запускаю./configure, make, make install, и тут я заметил, что в папке/usr/local/includemaxminddb _были созданы config.h и maxminddb.h .

Затем я запускаю свой установочный скрипт nginx, и ошибок больше не было.

Skeptic
28.01.2020, 01:53

Ссылка

Мне не хватало версии maxminddb для разработки, поэтому я использовал:

yum install libmaxminddb-devel

osoblanco
28.01.2020, 01:53

Ссылка

Теги

Похожие вопросы

Lim

unread,

Jul 4, 2018, 7:03:38 AM7/4/18

to openresty-en

Lately I tried to setup GeoIP2 with openresty, with lots of trying I didn’t get it to compile. The machine is running x64 Debian 8.11.

The following error I’m receiving is: ./configure: error: the geoip2 module requires the maxminddb library. Compiling Under root.

Even though libmaxminddb is installed, and I did put in headers .h files in /usr/include.

By searching on the net, there have been other people coming across the same issue (though I don’t think with openresty).

What they mentioned is that it’s in the order which the modules is in ./configure by putting it before some modules or after it did work for some people.

I tried that by putting it before and after, and excluding every optional module in openresty and only compiled it with openresty + geoip2. Still I got the same error. and the library is located in:

whereis libmaxminddb

libmaxminddb: /usr/local/lib/libmaxminddb.la /usr/local/lib/libmaxminddb.a /usr/local/lib/libmaxminddb.so

So I thought, have anyone even compiled GeoIP2 with openresty, anyone with results? Or maybe there’s a configuration error with openresty and geoip2 when you run ./configure.

Therefor I’m coming here. Looking for help, and hopefully not a issue by my part. I followed the instructions as stated.

Thanks hopefully there can be a workaround or a fix.

Igor Clark

unread,

Jul 4, 2018, 6:42:00 PM7/4/18

to openre…@googlegroups.com

Hello,

I make sure to run ldconfig when building GeoIP into OpenResty, to make sure Linux knows where to find the lib files. I build & install libmaxmind and then run ldconfig like so:

MAXMIND_INSTALL_PATH=/usr/share/maxmind

MAXMIND_LIB_PATH=${MAXMIND_INSTALL_PATH}/lib

MAXMIND_INC_PATH=${MAXMIND_INSTALL_PATH}/include

tar xzf libmaxminddb-1.1.2.tar.gz

pushd libmaxminddb-1.1.2

./configure --prefix=${MAXMIND_INSTALL_PATH}

make

make install

echo "${MAXMIND_LIB_PATH}" > /etc/ld.so.conf.d/libmaxminddb.conf

ldconfig -v 2>/dev/null |grep -i maxmind

popd

Probably needs a version bump but it works for me.

HTH,

Igor

Lim

unread,

Jul 5, 2018, 5:34:26 AM7/5/18

to openresty-en

Actually worked! Thanks. I guess I should’ve included the paths to libmaxminddb when running openresty ./configure script before, I had to do that to make it work, I simply included the path to that folder and running ldconfig before, that was a fast workaround, thank you again.

Понравилась статья? Поделить с друзьями:
  • Configure error sqlite3 library missing
  • Configsave ошибка формата потока
  • Config tool password error
  • Config tool is running now please close it and restart installing как исправить
  • Config status error something went wrong bootstrapping makefile fragments