Cara membuat direktori dan mengubah pemiliknya dengan paket deb

11

Saya perlu membuat paket deb yang akan membuat direktori untuk log. Saya ingin membuat direktori /var/logs/my_packagedan mengubah pemiliknya menjadi my_user.

Dalam dokumen ada informasi yang dapat saya buat file debian/dir. Tetapi ada info bahwa ini bukan cara terbaik untuk melakukannya. Dan tidak ada info bagaimana seseorang harus mengubah pemilik direktori di sana (saya sedang berpikir tentang menempatkan perintah chown my_user.my_user /var/logs/my_packagedalam debian/postinstfile).

Apa cara yang disarankan untuk membuat direktori dengan paket deb?

bessarabov
sumber
Selamat Datang di Tanya Ubuntu. Tolong, bisakah Anda meluangkan waktu Anda untuk membaca askubuntu.com/help/someone-answers
Sylvain Pineau

Jawaban:

9

Anda benar, Anda memerlukan debian/my_package.postintfile untuk melakukan operasi seperti itu:

#!/bin/sh

#DEBHELPER#

set -e

USER="my_user"

mkdir -p /var/log/my_package/    
if id -u $USER > /dev/null 2>&1; then    
    chown ${USER}:${USER} /var/log/my_package/
fi

Catatan : Skrip memeriksa apakah pengguna ada sebelum memanggil chown.

Sylvain Pineau
sumber
1
Saya sangat menyesal, tetapi ini tidak menjawab pertanyaan saya.
bessarabov
Tolong jelaskan mengapa skrip postinst ini tidak menjawab pertanyaan awal Anda. Saya agak bingung sekarang.
Sylvain Pineau
Maaf saya belum menjelaskannya dengan benar. Solusi Anda berfungsi dengan baik dan inilah yang telah saya terapkan. Tetapi dokter mengatakan This generally means there is a problem with the Makefile.saya mengerti pesan ini bahwa ada beberapa cara lain untuk melakukannya. Dan saya ingin mencari tahu apa cara yang dilakukan untuk melakukan tugas ini.
bessarabov
1
Pembuatan direktori dapat dilakukan di debian/rulesmana adalah Makefileuntuk paket-paket debian. Karena saya tidak tahu Anda, debian/rulessaya lebih suka mengusulkan solusi berdasarkan pada satu file. Tetapi chownperintah harus berupa proses pasca instalasi. debian / dirs harus dihindari tetapi jawaban awal saya baik-baik saja. Silakan pilih dan terima, terima kasih.
Sylvain Pineau
3

Anda tidak perlu membuat postinstskrip, tetapi solusinya masih agak rumit. Saya menggunakan dhwildcard di debian/rules:

#!/usr/bin/make -f
%:
        dh $@

binary:
        dh $@

yang melakukan semua hal yang dibutuhkan. Tapi saya perlu mengganti kepemilikan beberapa dir (sebut saja data). Jadi saya harus membuat pengecualian, saya menggunakan arahan khusus (ini adalah contoh):

    override_dh_install:
        dh_install   #calls default *.install and *.dirs installation
        install -d -o www-data -g www-data $(CURDIR)/debian/<package_name>/var/www/<something>/data 

Direktori data tidak harus dalam file * .dirs. Namun tetap ada satu trik. Debhelper berisi skrip dh_fixperms, yang akan memperbaiki kepemilikan kembali ke root, jadi kita perlu mengganti juga:

override_dh_fixperms:
    dh_fixperms --exclude data

Itu saja. Perlu diingat bahwa dir data tidak dihitung sebagai sebuah conffile, jadi itu akan dihapus pada paket hapus. Jika Anda perlu menjadikannya sebagai conffile, itu adalah cerita lain.

Marek Šimon
sumber
Apakah ini mengharuskan pengguna dan grup ada di sistem tempat paket dibuat? Dan jika ya, apakah ada cara untuk memastikannya dengan mekanisme berbasis Debian?
moritz
Ini akan membuat direktori pada sistem yang digunakan untuk membangun paket debian, bukan sistem paket diinstal.
gerardw