Ini mungkin pertanyaan yang bodoh, tetapi saya baru-baru ini menyadari bahwa saya tidak tahu mengapa tidak ada fungsi pengguna tunggal dengan apt-get.
Jawaban Saya tidak mencari:
- "Itu karena apt menulis ke direktori tingkat sistem". Ini adalah level permukaan mengapa, tapi saya mencari level yang lebih dalam. Apakah ada sesuatu yang secara fundamental memblokir lingkungan pengguna tunggal (ala pip + virtualenv)?
- "Anda bisa membangun dari sumber". Ini adalah solusi, tetapi tidak menjawab pertanyaan saya. Saya tidak ingin memperbaiki masalah jangka pendek, dan saya memiliki akses root pada semua mesin saya.
Jawaban:
Tidak selalu. Anda dapat menggunakan
apt-get
tanpasudo
. Ada beberapa contoh di mana Anda tidak perlusudo
sama sekali, seperti menggunakanapt-get download
yang mengunduh paket ke direktori Anda saat ini ,apt-get source
yang mengunduh file sumber debian ke direktori Anda saat ini,changelog
yang mengunduh dan mencetak changelog dari paket yang diberikan, dan perintah apa pun yang memiliki yang--simulate
/--dry-run
/--no-act
(dalam kasusinstall
Anda perlu juga--no-download
).Ini karena tindakan / perintah ini tidak perlu menulis direktori sistem.
Sekarang, mengapa
apt-get
perlusudo
? Sebenarnya tidak. Anda dapat membuang apt-get, mengunduh paket denganwget
dan menggunakandpkg --extract
dan mengekstrak paket di direktori apa pun yang Anda suka. Ada juga--instdir
yang harus bekerja untuk paket biner saja.Sekarang, mengapa ini bukan default? Karena itu menyebalkan. Untuk melakukan apa yang Anda inginkan, kami perlu mengemas kembali setiap paket dua kali, satu untuk jalan yang benar, dan satu lagi untuk melakukan apa yang Anda inginkan. Pada build, binari biasanya perlu tahu di mana file dan pustaka yang mereka butuhkan (dalam beberapa kasus, ini adalah hardcoded saat dikompilasi).
Sekarang, apa yang bisa Anda lakukan? Hanya chroot beberapa lingkungan a la virtualenv, di mana Anda dapat menginstal paket tanpa root.
Singkatnya, ini bukan cara apt-get dimaksudkan untuk digunakan, dan saya tidak tahu manajer paket lain yang mirip dengan apt-get yang memungkinkan Anda untuk melakukan itu. Pada akhirnya,
apt-get
hanya sebuah front-end ke dpkg yang dapat melakukan beberapa hal ini.sumber
Informasi dalam paket itu sendiri menentukan di mana file akan diinstal, jadi Anda perlu
sudo
menulis/
dan mengubah database paket.Ketika Anda menginstal paket, Anda menginstal file biner pra-dibangun dan konfigurasi terkait dan file meta dan skrip yang merupakan bagian penting dari paket. Skrip dan file konfigurasi ini terkait erat dengan dependensi dan sistem lainnya. Anda tidak ingin mengubahnya dengan ringan kecuali Anda tahu persis apa yang Anda lakukan.
Jika Anda menggunakan sistem, katakanlah di tempat kerja, di mana Anda tidak memiliki
sudo
akses, Anda dapat mengkompilasi dari sumber dan mengatur direktori instalasi ke rumah Anda. Maka, tidak perlu untuksudo
. Ketika Anda menginstal dari sumber, Anda biasanya tidak mengubah basis data paket.sumber
Itu bukan pertanyaan bodoh.
Level privilege dalam sistem operasi
Ubuntu - dan memang sistem operasi modern - memiliki konsep tingkat hak istimewa yang berbeda untuk perangkat lunak yang berbeda. Perangkat lunak yang diprakarsai oleh pengguna biasanya berjalan di bawah tingkat hak istimewa berbasis pengguna, yang karena alasan keamanan tidak memiliki akses yang diperlukan untuk memodifikasi sistem - hanya dapat memodifikasi file milik pengguna tersebut.
Untuk melakukan modifikasi pada sistem operasi yang dapat berdampak pada sistem secara keseluruhan, bukan hanya file pengguna, diperlukan tingkat hak istimewa yang lebih tinggi, yang di Linux disebut sebagai hak "superuser" (atau umumnya disebut "root"). Level privilege ini memiliki akses tanpa batas ke seluruh sistem operasi yang memungkinkannya untuk memodifikasi - atau menghancurkan - semua file untuk semua pengguna.
Peran apt-get
Ketika Anda menginstal perangkat lunak melalui apt-get, Anda menginstal perangkat lunak yang akan tersedia di seluruh sistem . Artinya, perangkat lunak tidak hanya akan ditempatkan di direktori home pengguna untuk dijalankan oleh pengguna itu saja, tetapi akan diinstal dalam direktori aplikasi sistem-luas (seperti di / usr, / etc, / var dan sebagainya ) untuk dijalankan oleh semua pengguna. Untuk memodifikasi direktori ini, Anda memerlukan hak superuser. Tidak ada pengguna yang tidak memiliki hak yang dapat mengubah direktori ini, karena jika tidak perangkat lunak yang tidak berhak dapat mengacaukan sistem.
Jika Anda mencoba menginstal sesuatu menggunakan apt-get tanpa memberikan hak istimewa pengguna super apt-get, rintangan pertama yang akan gagal diatasi adalah untuk mendapatkan kunci untuk menulis ke katalog perangkat lunak sendiri. Menjadi utilitas di seluruh sistem, apt-get mengelola katalog perangkat lunak yang diinstal, yang secara alami membutuhkan hak pengguna super untuk mengedit sehingga perangkat lunak yang tidak memiliki privasi tidak dapat mengacaukannya. Tetapi bahkan jika Anda entah bagaimana dapat mengatasi rintangan ini (misalnya, dengan mengubah izin file), banyak langkah lebih lanjut di sepanjang cara menginstal perangkat lunak akan tetap gagal, karena rutin instalasi akan tergantung pada penulisan ke beberapa direktori sistem.
Menggunakan Linux dimungkinkan untuk menginstal perangkat lunak tanpa hak pengguna super, tetapi Anda perlu menulis sendiri (mis., Skrip shell) atau mengkompilasinya sendiri dan menjalankan executable yang dikompilasi secara langsung. Lebih mudah hanya menginstalnya di seluruh sistem menggunakan apt-get (dan utilitas berbasis APT lainnya seperti aptitude, synaptic, atau pusat perangkat lunak Ubuntu) jika Anda memiliki akses untuk melakukannya.
sumber
Mengapa apt-get menginstal ke / (atau serupa) direktori secara default?
Alasan sederhana untuk ini adalah
apt-get
tidak memutuskan di mana menginstal perangkat lunak. Diputuskan oleh pengembang dan dikodekan di dalam aplikasi itu sendiri.Bisakah saya menginstal ke direktori lain?
Ya, Anda dapat menginstal ke direktori lain. Untuk perangkat lunak open source, dapatkan sumbernya, ubah direktori instalasi, kompilasi, bangun dan instal. Biasanya ada opsi untuk
configure
skrip yang disertakan yang memungkinkan Anda menentukan tempat untuk menginstal. Ini biasanya--prefix
.Tapi saya bersikeras menggunakan apt-get. Apa yang harus dilakukan sekarang?
BAIK. Masih ada cara untuk melakukan ini dengan apt-get, meskipun itu akan terlalu banyak untuk pengguna akhir. Ikuti langkah-langkahnya.
$HOME
.sudo apt-get update
.apt-get install package
.Itu terlalu mudah / sulit. Apakah mungkin untuk memilih direktori selama instalasi?
Iya dan tidak.
Ya karena itu mungkin, beberapa perangkat lunak menggunakan metode ini, satu-satunya yang saya tahu adalah
Qt5
. Ia memiliki file .run yang, ketika dijalankan meminta direktori instalasi di antara banyak input lainnya.Tidak karena metode ini tidak digunakan
apt-get
.Bisakah saya melakukan ini dengan mudah suatu hari nanti
apt-get
?Saya tidak berpikir pengembang
apt-get
dan / atau pengembang perangkat lunak akan tertarik untuk melakukan ini, tetapi beberapa perangkat lunak dapat dikembangkan yang akan melakukan sumber, mengubah, mengkompilasi, membangun, menginstal langkah-langkah secara otomatis dengan hanya meminta direktori instalasi.Indera ke-6 saya memberi tahu saya bahwa perintahnya adalah
sumber
apt-get
pengembang untuk melakukannya. Juga, banyak program yang ada tergantung pada program lain dan mereka mencarinya di direktori / usr. Menerapkan fungsi seperti itu akan membutuhkan perubahan di semua perangkat lunak yang ada yang memiliki dependensi (ini tidak berlaku dalam ribuan)./opt/package
dan chmod direktori sebagai gantinya.$HOME/opt/
jika mereka tidak memiliki hak istimewa untuk menginstal paket masuk/opt/
..Karena itu mengedit file yang chmodded sehingga Anda tidak dapat menggunakannya. Anda mungkin dapat chmod mereka sehingga Anda tidak bisa merekomendasikan saya melakukannya
sumber