Cách tạo thư mục và thay đổi chủ sở hữu với gói gỡ lỗi


10

Tôi cần tạo gói deb sẽ tạo thư mục cho nhật ký. Tôi muốn tạo thư mục /var/logs/my_packagevà thay đổi chủ sở hữu thành my_user.

Trong các tài liệu có thông tin mà tôi có thể tạo tập tin debian/dir. Nhưng có thông tin rằng đây không phải là cách tốt nhất để làm điều đó. Và không có thông tin làm thế nào một người nên thay đổi chủ sở hữu thư mục (Tôi đang suy nghĩ về việc đặt lệnh chown my_user.my_user /var/logs/my_packagetrong debian/postinsttệp).

Cách được đề xuất để tạo thư mục với gói deb là gì?


Chào mừng bạn đến hỏi Ubuntu. Xin vui lòng, bạn có thể dành một chút thời gian của mình để đọc Askubfox.com/help/someone-answers
Sylvain Pineau

Câu trả lời:


8

Bạn đã đúng, bạn cần một debian/my_package.postinttệp để thực hiện thao tác đó:

#!/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

Lưu ý : Kịch bản kiểm tra nếu người dùng tồn tại trước khi gọi chown.


1
Tôi vô cùng xin lỗi, nhưng điều này không trả lời câu hỏi của tôi.
bessarabov

Vui lòng giải thích tại sao tập lệnh postinst này không trả lời câu hỏi ban đầu của bạn. Bây giờ tôi hơi bối rối.
Sylvain Pineau

Tôi xin lỗi vì tôi đã không giải thích nó theo cách thích hợp. Giải pháp của bạn hoạt động tốt và đây là những gì tôi đã thực hiện. Nhưng các tài liệu nói rằng This generally means there is a problem with the Makefile.tôi hiểu thông điệp này rằng có một số cách khác để làm điều đó. Và tôi muốn tìm hiểu xem đâu là cách thức để thực hiện nhiệm vụ này.
bessarabov

1
Việc tạo thư mục có thể được thực hiện trong debian/rulesđó là các Makefilegói debian. Vì tôi không biết bạn debian/rulesnên tôi muốn đề xuất một giải pháp dựa trên một tệp duy nhất. Nhưng chownlệnh phải là một quá trình sau khi cài đặt. debian / dirs nên tránh nhưng câu trả lời ban đầu của tôi là hoàn toàn tốt. Hãy bỏ phiếu và chấp nhận nó, cảm ơn.
Sylvain Pineau

3

Bạn không cần phải tạo một postinstkịch bản, nhưng giải pháp vẫn còn một chút khó khăn. Tôi sử dụng dhký tự đại diện trong debian/rules:

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

binary:
        dh $@

trong đó có tất cả những thứ cần thiết. Nhưng tôi cần ghi đè quyền sở hữu của một số thư mục (hãy gọi nó là dữ liệu). Vì vậy, tôi phải tạo ra một số ngoại lệ, tôi sử dụng chỉ thị đặc biệt (đây là một ví dụ):

    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 

Thư mục dữ liệu không cần phải ở trong tệp * .dirs. Nhưng vẫn có một mẹo. Debrcper chứa tập lệnh dh_fixperms, sẽ sửa quyền sở hữu trở lại root, vì vậy chúng ta cũng cần ghi đè:

override_dh_fixperms:
    dh_fixperms --exclude data

Đó là tất cả. Hãy nhớ rằng thư mục dữ liệu không được tính là một conffile, vì vậy nó sẽ bị xóa trên gói gỡ bỏ. Nếu bạn cần làm cho nó trở thành một câu chuyện thì đó là một câu chuyện khác.


Điều này có yêu cầu người dùng và nhóm tồn tại trên hệ thống nơi gói được xây dựng không? Và nếu có, có cách nào để đảm bảo điều đó với cơ chế dựa trên Debian không?
moritz

Điều này sẽ tạo các thư mục trên hệ thống được sử dụng để xây dựng gói debian, chứ không phải hệ thống mà gói được cài đặt trên đó.
gerardw
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.