q15-build-and-install-from-source
Énoncé§
Solve this question on: app-srv1
Install the text based terminal browser links2 from source on server app-srv1. The source is provided at /tools/links-2.14.tar.bz2 on that server.
Configure the installation process so that:
- The target location of the installed binary will be
/usr/bin/links - Support for ipv6 will be disabled
Solution§
Let’s first check out the provided archive and extract it’s content:
ssh app-srv1
root@app-srv1:~$ cd /tools
root@app-srv1:/tools$ ls
links-2.14.tar.bz2
We’ll go ahead and extract the archive:
root@app-srv1:/tools$ tar xjf links-2.14.tar.bz2
root@app-srv1:/tools$ cd links-2.14
root@app-srv1:/tools/links-2.14$ ls -lh
total 6.9M
-rw-r--r-- 1 ubuntu ubuntu 9.2K Aug 12 2015 AUTHORS
-rw-r--r-- 1 ubuntu ubuntu 1.2K Jan 2 2005 BRAILLE_HOWTO
-rw-r--r-- 1 ubuntu ubuntu 19K Sep 21 2013 COPYING
-rw-r--r-- 1 ubuntu ubuntu 114K Nov 26 2016 ChangeLog
-rw-r--r-- 1 ubuntu ubuntu 4.6K Nov 26 2016 INSTALL
-rw-r--r-- 1 ubuntu ubuntu 1.9K Apr 9 2012 KEYS
-rw-r--r-- 1 ubuntu ubuntu 650 Jan 10 2005 Links_logo.png
-rw-r--r-- 1 ubuntu ubuntu 2.6K Jun 16 2016 Makefile.am
-rw-r--r-- 1 ubuntu ubuntu 22K Nov 3 2016 Makefile.in
-rw-r--r-- 1 ubuntu ubuntu 214 Feb 11 2012 NEWS
...
The usual process of installing from source is:
./configure (args...)makemake installHere the question requires specific configuration parameters. We can list all possible options:
root@app-srv1:/tools/links-2.14$ ./configure -help
Usage: configure [options] [host]
Options: [defaults in brackets after descriptions]
Configuration:
--cache-file=FILE cache test results in FILE
--help print this message
--no-create do not create output files
--quiet, --silent do not print checking... messages
--version print the version of autoconf that created configure
Directory and file names:
—prefix=PREFIX install architecture-independent files in PREFIX # !! USEFUL
[/usr/local]
—exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[same as prefix]
—bindir=DIR user executables in DIR [EPREFIX/bin]
—sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
—libexecdir=DIR program executables in DIR [EPREFIX/libexec]
—datadir=DIR read-only architecture-independent data in DIR
[PREFIX/share]
—sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
—sharedstatedir=DIR modifiable architecture-independent data in DIR
[PREFIX/com]
…
—enable-graphics use graphics
—disable-utf8 disable UTF-8 terminal (saves memory)
—without-getaddrinfo compile without getaddrinfo function
—without-ipv6 compile without ipv6 # !! USEFUL
—without-libevent compile without libevent
—without-gpm compile without gpm mouse
—with-ssl(=directory) enable SSL support
—with-ssl=nss enable SSL support through NSS OpenSSL emulation
—disable-ssl-pkgconfig don’t use pkgconfig when searching for openssl
…
It’s also possible to open the ./configure file in a text editor to investigate possible options if the help output won’t suffice.
We now use the following configuration:
root@app-srv1:/tools/links-2.14$ ./configure --prefix /usr --without-ipv6
creating cache ./config.cache
checking for a BSD compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking whether make sets ${MAKE}... yes
checking for working aclocal-1.4... missing
checking for working autoconf... missing
...
creating ./config.status
creating Makefile
creating config.h
---------------------------------------------------------
Configuration results:
Event handler: NO
IPv6: NO
Supported compression: NO
SSL support: NO
UTF-8 terminal: YES
GPM support: NO
Graphics enabled: NO
---------------------------------------------------------
After the configuration we continue with make:
root@app-srv1:/tools/links-2.14$ make
gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -c af_unix.c
gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -c auth.c
gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -c beos.c
gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -c bfu.c
gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -c block.c
gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -c bookmark.c
gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -c cache.c
...
gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -c vms.c
gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -c x.c
gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -c xbm.c
gcc -g -O2 -o links af_unix.o auth.o beos.o bfu.o block.o bookmark.o cache.o charsets.o compress.o connect.o cookies.o data.o default.o dip.o directfb.o dither.o dns.o dos.o drivers.o error.o file.o finger.o fn_impl.o font_inc.o framebuf.o ftp.o gif.o grx.o hpux.o html.o html_gr.o html_r.o html_tbl.o http.o https.o img.o imgcache.o jpeg.o jsint.o kbd.o language.o listedit.o lru.o mailto.o main.o memory.o menu.o objreq.o os_dep.o pmshell.o png.o sched.o select.o session.o smb.o string.o suffix.o svg.o svgalib.o terminal.o tiff.o types.o url.o view.o view_gr.o vms.o x.o xbm.o -lpthread
/usr/bin/ld: session.o: in function `get_temp_name':
/tools/links-2.14/session.c:1056: warning: the use of `tempnam' is dangerous, better use `mkstemp'
Followed by the make install:
root@app-srv1:/tools/links-2.14$ make install
make[1]: Entering directory '/tools/links-2.14'
/bin/sh ./mkinstalldirs /usr/bin
/usr/bin/install -c links /usr/bin/links
make install-man1
make[2]: Entering directory '/tools/links-2.14'
/bin/sh ./mkinstalldirs /usr/man/man1
/usr/bin/install -c -m 644 ./links.1 /usr/man/man1/links.1
make[2]: Leaving directory '/tools/links-2.14'
make[1]: Leaving directory '/tools/links-2.14'
This should result in:
root@app-srv1:~$ whereis links
links: /usr/bin/links /usr/man/man1/links.1
root@app-srv1:~$ /usr/bin/links -version
Links 2.14
We can verify that ipv6 is disabled:
root@app-srv1:~$ /usr/bin/links -lookup ip6-localhost
error: host not found # output if ipv6 is disabled
root@app-srv1:~$ /usr/bin/links -lookup ip6-localhost
::1 # output if ipv6 is enabled