Intinya, perbedaan antara /
dan /usr
hierarki tidak dan tidak boleh berada di tangan pengelola upstream paket (baca:Bukan tanggung jawab Anda). Sejak /
seharusnya hanya berisi file yang diperlukan untuk mem-boot dan membuat /usr
tersedia, itu adalah keputusan administratif apa yang masuk ke /
. Untuk penginstalan dari sumber, keputusan ini dibuat oleh penginstal, dan untuk distribusi, oleh pengelola paket.
Sebagai alasan, misalkan seseorang mencoba membuat chroot
lingkungan. Perbedaan antara /usr dan / tidak ada artinya di lingkungan, dan tidak akan dibuat. Semua prefiks disetel ke /foo/bar/chroot
, dan skrip konfigurasi apa pun yang mengotak-atik $prefix
cenderung menimbulkan perilaku aneh. Argumen yang sama berlaku untuk skrip seperti pembantu pengemasan Debian, yang bergantung pada $prefix
biasa semantik untuk bekerja.
Oleh karena itu, solusi terbersih adalah bash-4.1
larutan. Pada dasarnya Anda memiliki dua opsi bersih:Pisahkan paket Anda menjadi bagian boot-critical dan non-boot-critical, atau biarkan configure
Anda script menawarkan prefiks alternatif untuk bagian boot-critical, yang diatur secara default ke /
, meninggalkan $prefix
sebagai /usr
.
Ada dua tingkat yang berbeda untuk pertanyaan ini, dan semua pertanyaan Anda tampaknya berlaku untuk arti kedua (paket biner yang dihasilkan oleh file *.spec, atau debian/rules, atau file *.pkg.) Sejauh autotools khawatir, Anda TIDAK PEDULI. Anda tidak boleh mencoba menentukan awalan default selain /usr/local di configure.ac Anda. Menentukan di mana hal-hal harus diinstal dilakukan di file kontrol paket biner, dan BUKAN di configure.ac. Distribusi sumber yang menggunakan skrip konfigurasi yang dihasilkan autoconf harus dipasang di /usr/local secara default, dan yang lainnya adalah kesalahan pengemasan.
Jika Anda ingin memiliki distribusi sumber yang dapat digunakan pengguna untuk menginstal dengan mudah di lokasi tertentu pada platform tertentu, dapat diterima untuk menyertakan skrip di tarball yang melakukannya. Misalnya, Anda dapat menyertakan skrip build yang terlihat seperti:
#!/bin/sh case $1 in foo) args='--prefix=/usr --bindir=/bin --sysconfdir=/etc';; bar) args='--prefix=/opt';; *) args=;; esac $(dirname $0)/configure $args && make && make install
yang akan menentukan argumen default untuk dikonfigurasi untuk platform 'foo' dan 'bar', tetapi sepertinya pertanyaan Anda adalah tentang file kontrol untuk paket biner.