GNU/Linux >> Belajar Linux >  >> Linux

Ubah Tar Menjadi Cpio Tanpa Rooting?

Saya memiliki tarball yang berisi banyak file dengan root:root owner dan/atau inode perangkat khusus. cpio hanya menerima jalur yang ada di sistem file saat membuat arsip cpio. Dan saya tidak mau harus sudo untuk mengubah tar menjadi cpio, sementara saya ingin mempertahankan semua izin, pemilik, dan inode khusus.

Apakah ada cara yang bersih untuk menangani ini?

EDIT1:

Saya percaya bahwa fakeroot dapat dilihat sebagai cara yang agak bersih. Namun skalanya tidak seperti yang diharapkan – perbedaan kecepatan hampir 1.000x:

[[email protected] root]$ ls -l ../fanbox.tar
-rw-rw-r-- 1 user user 56555520 May 22 03:33 ../fanbox.tar
[[email protected] root]$ time tar -x --delay-directory-restore -f ../fanbox.tar
tar: dev/null: Cannot mknod: Operation not permitted
tar: dev/random: Cannot mknod: Operation not permitted
tar: dev/urandom: Cannot mknod: Operation not permitted
tar: Exiting with failure status due to previous errors

real    0m0.255s
user    0m0.062s
sys 0m0.193s
[[email protected] root]$ rm -rf *
[[email protected] root]$ time fakeroot tar -x --delay-directory-restore -f ../fanbox.tar

real    3m49.381s
user    0m0.812s
sys 0m2.760s
[[email protected] root]$ 

Berdasarkan keluaran time perintah Saya kira itu karena komunikasi antara fakeroot dan faked .

Sebagai referensi, tidak ada banyak perbedaan antara tarball 2M dan tarball 50M ketika saya mengubah fakeroot ke sudo bash dalam naskah saya. Dan saya juga percaya bahwa masalahnya adalah jumlah file dalam tarball, bukan ukurannya:Saya menggunakan skrip yang sama pada ~10M tarball dengan dua binari 5M, dan skripnya tidak terlalu lambat.

Jawaban yang Diterima:

Anda dapat menggunakan fakeroot . Seperti namanya, itu memalsukan pengguna root, dengan mencegat panggilan sistem server dengan LD_LIBRARY_PATH /LD_PRELOAD library wrapper, agar proses percaya bahwa itu berjalan sebagai root. Ini dibuat untuk tujuan membangun dan mengemas aplikasi tanpa harus menjadi root, termasuk menggunakan make install yang biasanya akan dijalankan sebagai root. Ini sangat cocok untuk membuat arsip.

Selama ini, daemon bercabang faked akan berjalan untuk mengingat semua hak kepemilikan file palsu atau informasi pada file khusus yang diyakini telah dibuat oleh proses anak. Jadi semua operasi harus dilakukan dalam "instance" yang sama, atau faked akan keluar dan melupakan apa yang diingatnya.

$ fakeroot
# tar xf ...
# find foo ... | cpio -o ...
# exit
$ 

Contoh lain yang menampilkan faked interaksi:

$ mknod /tmp/vaporware b 8 0
mknod: /tmp/vaporware: Operation not permitted
$ fakeroot
# mknod /tmp/vaporware b 8 0
# ls -l /tmp/vaporware
brw-r--r-- 1 root root 8, 0 May 18 08:33 /tmp/vaporware
# exit
$ ls -l /tmp/vaporware
-rw-r--r--. 1 user user 0 May 18 08:33 /tmp/vaporware

Linux
  1. Buat Arsip Tar Dipecah Menjadi Blok Ukuran Maksimal?

  2. Ubah Kata Sandi Root Dengan Sudo, Tanpa Su?

  3. Tar:Ekstrak File Tunggal Ke Direktori Tanpa Membuat Subfolder?

  1. Apakah mungkin menginstal g ++ di CentOS tanpa root?

  2. Instal zsh tanpa akses root?

  3. Periksa apakah direktori adalah repositori git (tanpa harus cd ke dalamnya)

  1. Bagaimana Cara Menjalankan Perintah Tanpa Properti Root?

  2. Buat Database PostgreSQL tanpa hak akses root

  3. Bagaimana saya bisa menginstal RPM tanpa menjadi root?