GNU/Linux >> Belajar Linux >  >> Linux

Instal binari ke /bin, /sbin, /usr/bin dan /usr/sbin, interaksi dengan --prefix dan DESTDIR

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.


Linux
  1. Mengapa /bin/sh Menunjuk Ke /bin/dash Dan Bukan /bin/bash??

  2. Konflik Node.js:/sbin/node Vs /usr/bin/node?

  3. Apa perbedaan antara #!/usr/bin/env bash dan #!/usr/bin/bash?

  1. cmake --version menunjuk ke /usr/bin/cmake sementara cmake menunjuk ke /usr/local/bin

  2. Kapan saya harus menggunakan /dev/shm/ dan kapan saya harus menggunakan /tmp/?

  3. Memindahkan /bin konten ke /usr/bin, mungkin untuk membatalkan?

  1. Bagaimana Linux Menangani Beberapa Pemisah Jalur Berturut-turut (/home////username///file)?

  2. Apa Perbedaan Antara /sbin/nologin Dan /bin/false?

  3. Haruskah situs web berada di /var/ atau /usr/ sesuai dengan penggunaan yang disarankan?