Δημιουργία .deb με post-install script  Το θέμα επιλύθηκε

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Δημιουργία .deb με post-install script

Δημοσίευσηαπό jennie » 17 Ιαν 2014, 03:54

Θέλω να φτιάξω ένα πακέτο .deb με λεξικά για το goldendict. Προς το παρόν, έχω ένα πακέτο που εγκαθιστά τα κατάλληλα αρχεία στο /opt/goldendict/content. Είναι όλα μη εκτελέσιμα συμπιεσμένα αρχεία απλού κειμένου.
Το δεύτερο βήμα είναι να πω στο goldendict να ελέγξει για αρχεία το /opt/goldendict/content. Αν το κάνω από το γραφικό περιβάλλον του goldendict, δημιουργείται στο φάκελο ~/.goldendict ένα αρχείο config με το εξής περιεχόμενο:
Κώδικας: Επιλογή όλων
<config>
<paths>
<path recursive="1">/opt/goldendict/content</path>
</paths>
</config>

Σκέφτομαι ότι πρέπει να δημιουργήσω ένα post-install script για να γίνεται αυτόματα αυτή η προσθήκη στο ~/.goldendict/config, αλλά θα πρέπει κάποιος να μου το εξηγήσει βήμα βήμα. Το κυριότερο θέμα μου είναι ότι δεν έχω καταλάβει αν αρκεί να γράψω μία εντολή που θα δημιουργεί το αρχείο ~/.goldendict/config στον προσωπικό φάκελο του χρήστη που κάνει την εγκατάσταση. Πολύ φοβάμαι ότι η διαδικασία θα είναι πιο περίπλοκη, ειδικά αν θέλω οι ρυθμίσεις να προστεθούν σε όλους τους διαθέσιμους λογαριασμούς χρηστών.
Αν δεν καταφέρω να φτιάξω το post-install για το deb, υποθέτω ότι θα αποθηκεύσω ένα πρότυπο αρχείο config στο /opt/goldendict και θα δώσω οδηγίες για αντιγραφή του στο ~/.goldendict από το τερματικό. Οπότε έχω μια εναλλακτική. Από την άλλη, έχω και άλλα λεξικά που θα μπορούσα να πακετάρω, οπότε αν το φτιάξω μια φορά θα μπορούσα να το ξαναχρησιμοποιήσω.

Παρεμπιπτόντως, ρίξτε μια ματιά αν δουλεύει το πακέτο ως έχει, και αν σας αρέσει η επιλογή των λεξικών.
1 Γνώσεις Linux: Μέτριες ┃ Προγραμματισμού: Ελάχιστες ┃ Αγγλικών: Εξαιρετικές
2 Ubuntu 12.04 LTS σε όλους τους υπολογιστές της οικογένειάς μου
Άβαταρ μέλους
jennie
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 495
Εγγραφή: 24 Δεκ 2008, 13:57
Εκτύπωση

Re: Δημιουργία .deb με post-install script

Δημοσίευσηαπό jennie » 18 Ιαν 2014, 11:53

Να υποθέσω ότι δεν μπορεί να βοηθήσει κανείς;
Σκέφτομαι να δοκιμάσω την τύχη μου σε κάποιο αγγλόφωνο φόρουμ. Τι θα μου συνιστούσατε για το συγκεκριμένο θέμα; Askubuntu, stack overflow, κάτι άλλο;
1 Γνώσεις Linux: Μέτριες ┃ Προγραμματισμού: Ελάχιστες ┃ Αγγλικών: Εξαιρετικές
2 Ubuntu 12.04 LTS σε όλους τους υπολογιστές της οικογένειάς μου
Άβαταρ μέλους
jennie
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 495
Εγγραφή: 24 Δεκ 2008, 13:57
Εκτύπωση

Re: Δημιουργία .deb με post-install script

Δημοσίευσηαπό lepidas » 18 Ιαν 2014, 14:02

ε αυτα τα 2 που ειπες
Άβαταρ μέλους
lepidas
superbTUX
superbTUX
 
Δημοσιεύσεις: 3326
Εγγραφή: 11 Μάιος 2011, 11:10
Εκτύπωση

Re: Δημιουργία .deb με post-install script

Δημοσίευσηαπό Learner » 18 Ιαν 2014, 15:38

Την απάντηση σου πιθανότατα θα την βρεις κάπου εδώ → https://wiki.debian.org/Packaging
Δεν έχω ασχοληθεί σοβαρά με το debian packaging, αν και δημιουργώ πακέτα για το Launchpad , αλλά όχι from scratch. Το postinst script όπως είπες δεν είναι κάτι άλλο από ένα script που εκτελείται κατά την διάρκεια της εγκατάστασης του πακέτου. Μπορείς να δεις πολλά παραδείγματα από postinst scripts μέσα στην διαδρομή /var/lib/dpkg/info/
Επίσης σκέψου μήπως στο πακέτο σου συμπεριλάβεις ως εξάρτηση το ίδιο το λεξικό (goldendict). Εννοώ πως αν κάποιος εγκαταστήσει το πακέτο σου και δεν έχει το λεξικό εγκατεστημένο...

Τέλος, σκέψου να ανεβάσεις το πακέτο στο Launchpad, ειδικά αν έχεις σκοπό να το διευρύνεις. Εκεί θα χρειαστείς περισσότερα αρχεία να δημιουργήσεις. Δες εδώ μια καλή απάντηση.
About Me
NickTux@GitHub

Spoiler: show
1. Ubuntu 18.04 LTS
2. Intel Core i3 CPU M 380 2.53GHz ‖ RAM 6GB ‖ Acer Aspire 5733
3. Intel Integrated Graphics [8086:0046] {i915}
4. wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01)
Άβαταρ μέλους
Learner
Συντονιστής
Συντονιστής
 
Δημοσιεύσεις: 9766
Εγγραφή: 08 Νοέμ 2010, 21:24
Τοποθεσία: Αθήνα
Launchpad: nicktux
IRC: NickTux
Εκτύπωση

Re: Δημιουργία .deb με post-install script

Δημοσίευσηαπό jennie » 18 Ιαν 2014, 16:01

Ευχαριστώ για τις υποδείξεις. Μόλις είχα μια συνομιλία στο irc με τον @alkisg που με διαφώτισε πλήρως!
Learner έγραψε:Επίσης σκέψου μήπως στο πακέτο σου συμπεριλάβεις ως εξάρτηση το ίδιο το λεξικό (goldendict). Εννοώ πως αν κάποιος εγκαταστήσει το πακέτο σου και δεν έχει το λεξικό εγκατεστημένο...

Το έχω σκεφτεί, αλλά δεν είμαι σίγουρη ότι θα το κάνω, γιατί θεωρητικά θα μπορούσαν να χρησιμοποιηθούν και από άλλη εφαρμογή τα λεξικά. Το πακέτο για το wordnet που έχω υπόψη μου το έχει στα recommends.
1 Γνώσεις Linux: Μέτριες ┃ Προγραμματισμού: Ελάχιστες ┃ Αγγλικών: Εξαιρετικές
2 Ubuntu 12.04 LTS σε όλους τους υπολογιστές της οικογένειάς μου
Άβαταρ μέλους
jennie
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 495
Εγγραφή: 24 Δεκ 2008, 13:57
Εκτύπωση

Re: Δημιουργία .deb με post-install script

Δημοσίευσηαπό Learner » 18 Ιαν 2014, 16:15

jennie έγραψε:Μόλις είχα μια συνομιλία στο irc με τον @alkisg που με διαφώτισε πλήρως!

Αν την έκανες μια παράθεση κι εδώ, να διαφωτιστούμε κι εμείς (ή άλλοι με παρόμοιες απορίες).. :)
About Me
NickTux@GitHub

Spoiler: show
1. Ubuntu 18.04 LTS
2. Intel Core i3 CPU M 380 2.53GHz ‖ RAM 6GB ‖ Acer Aspire 5733
3. Intel Integrated Graphics [8086:0046] {i915}
4. wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01)
Άβαταρ μέλους
Learner
Συντονιστής
Συντονιστής
 
Δημοσιεύσεις: 9766
Εγγραφή: 08 Νοέμ 2010, 21:24
Τοποθεσία: Αθήνα
Launchpad: nicktux
IRC: NickTux
Εκτύπωση

Re: Δημιουργία .deb με post-install script  Το θέμα επιλύθηκε

Δημοσίευσηαπό jennie » 23 Ιαν 2014, 15:51

Learner έγραψε:Αν την έκανες μια παράθεση κι εδώ, να διαφωτιστούμε κι εμείς (ή άλλοι με παρόμοιες απορίες).. :)

Παράλειψή μου. Η βασική απάντηση ήταν ότι δεν πρέπει να δημιουργούμε .deb που να πειράζουν τον κατάλογο του χρήστη.
Μου πρότεινε να φτιάξω ένα launcher-wrapper για το ίδιο το πρόγραμμα goldendict, που θα είχε π.χ. τη μορφή:
Κώδικας: Επιλογή όλων
#!/bin/sh

# If the user doesn't yet have a .config file,
# copy our own template
if [ ! -f "$HOME/.goldendict/config" ]; then
mkdir -p "$HOME/.goldendict"
cp /usr/share/goldendict-wrapper/config-template "$HOME/.goldendict/config"
fi


Ορίστε και τα σχετικά αποσπάσματα από το log:
Spoiler: show
έγραψε:τρέξε strace -e trace=file goldendict
και δες σε ποια μέρη διαβάζει *καθολικά* αρχεία λεξικών και ρυθμίσεων
και όχι ανά χρήστη.
...
01:25:42 μμ) alkisg: Για φτιάξιμο του deb, θα δίνεις μόνο: debuild -b -tc
(01:26:02 μμ) alkisg: Στην αρχή θα σου εγκαταστήσω αυτό που έφτιαξα, για να δεις ότι δουλεύει και με stardict και με goldendict
(01:26:15 μμ) alkisg: Μετά, θα αντιγράψεις το φάκελο debian/ και θα φτιάξεις νέο πακέτο για τα δικά σου...
...
(01:41:02 μμ) jennie_: βασικά, το goldendict ψάχνει για λεξικά στο φάκελο του stardict μόνο μία φορά αμέσως μετά την εγκατάσταση.
(01:41:22 μμ) alkisg: Υπάρχει κάποιος φάκελος που να τον κοιτάει πάντα για νέα λεξικά;
(01:41:24 μμ) jennie_: Αν δεν έχεις αυτό το φάκελο κατά την εγκατάσταση και το πρώτο άνοιγμα του goldendict
(01:41:31 μμ) jennie_: όχι
(01:41:38 μμ) jennie_: αυτό είναι το πρόβλημα
(01:41:39 μμ) alkisg: Τότε θέλει bug report στο goldendict
(01:41:54 μμ) jennie_: είχα κάνει πριν από κανένα μήνα
(01:42:29 μμ) jennie_: https://github.com/goldendict/goldendict/issues/426
(01:42:38 μμ) jennie_: όχι αυτό ακριβώς δηλαδή
(01:42:46 μμ) jennie_: τέσπα, δεν έχω λάβει απάντηση
(01:42:48 μμ) alkisg: Δεν είναι δουλειά των πακέτων να πειράζουν οτιδήποτε κάτω από το /home/username, το περισσότερο που μπορούν να κάνουν είναι wrappers
(01:43:19 μμ) alkisg: Π.χ. να κάνεις divert το goldendict σε goldendict.original και να βάλεις δικό σου launcher που να κάνει τότε ό,τι θες στο /home/username
(01:44:52 μμ) jennie_: όταν εννοείς δεν είναι δουλειά των πακέτων, εννοείς δεν γίνεται, ή δεν πρέπει να γίνεται;
(01:46:36 μμ) jennie_: π.χ., ένα πακέτο με τίτλο greek package θα μπορούσε εκτός του να προσθέτει ελληνικά, να ενεργοποιεί και την ελληνική μορφολογία και μεταγραφή, ή να προσθέτει λινκ για online αναζήτηση σε ελληνική βικιπαίδεια και ελληνικά λεξικά
(01:47:12 μμ) alkisg: Κυρίως, δεν πρέπει να γίνεται, γιατί αν κάποιος το χρειαστεί, σημαίνει ότι έχει πρόβλημα το ΑΛΛΟ πακέτο,
(01:47:42 μμ) alkisg: π.χ. στην περίπτωση που λες, θα έπρεπε π.χ. το goldendict να προσφέρει φάκελο /etc/goldendict.d/ όπου άλλα πακέτα να "πετάνε" ρυθμίσεις για λεξικά, μορφολογία κλπ
(01:48:14 μμ) alkisg: Αν δεν βρεις ανταπόκριση από upstream, τότε φτιάξε wrapper launcher
(01:48:17 μμ) jennie_: Εγώ, η άλλη λύση που έχω σκεφτεί είναι να προσθέσω ένα πρότυπο αρχείο config στο deb και να προτείνω να το αντιγράψει κανείς στο ~/.goldendict/config
(01:48:46 μμ) alkisg: Επίσης κανονικά έπρεπε να είναι ~/.config/goldendict :)
(01:48:54 μμ) alkisg: Φαίνεται ότι γενικά ο τύπος δεν πολυξέρει από linux...
(01:49:15 μμ) alkisg: Να σου πω τι μπορείς να κάνεις:
(01:49:20 μμ) jennie_: για πες
(01:49:22 μμ) alkisg: Ένα πακέτο "goldendict-launcher"
(01:49:46 μμ) alkisg: Το οποίο θα κάνει dpkg-divert (γκούγκλαρέ το) το /usr/bin/goldendict
(01:49:58 μμ) alkisg: θα το βάζει στο /usr/bin/goldendict.real
(01:50:08 μμ) alkisg: Και στη θέση του θα βάζει ένα shell script, /usr/bin/goldendict
(01:50:23 μμ) alkisg: Όταν λοιπόν ένας χρήστης τρέχει το goldendict από το μενού, θα τρέχει το script σου
(01:50:37 μμ) alkisg: Αυτό, θα ενημερώνει κατάλληλα το ~/.goldendict/config του χρήστη
(01:50:50 μμ) alkisg: Με βάση ρυθμίσεις στο /etc/goldendict ή με βάση ό,τι αγαπάς
(01:51:00 μμ) alkisg: Και τελικά θα τρέχει exec /usr/bin/goldendict.real "$@"
(01:51:08 μμ) jennie_: οκ, κατάλαβα
(01:51:21 μμ) alkisg: Αυτό τελικά μπορείς να το προτείνεις και στο debian packaging
(01:51:45 μμ) alkisg: Ώστε να συμπεριληφθεί στο .deb ακόμα και αν ο upstream προγραμματιστής δεν ενδιαφέρεται να υποστηρίξει /etc/goldendict.d/
(01:52:11 μμ) alkisg: Το βασικό πάντως είναι ότι σου λύνει το πρόβλημα άμεσα και με σχετικά σωστό τρόπο
(01:53:35 μμ) jennie_: Οκ, 1. Πώς ακριβώς γράφω το σκριπτ; Ας πάρουμε την πολύ βασική περίπτωση, τσεκάρω αν υπάρχει το home/.goldendict/config και αν δεν υπάρχει προσθέτω το δικό μου
(01:56:16 μμ) alkisg: ...αυτό :)
(01:56:35 μμ) jennie_: ευχαριστώ!
(01:58:02 μμ) jennie_: 2. Εξακολουθώ να μην καταλαβαίνω. Εφόσον το goldendict επιτρέπει να βάζεις λεξικά σε όποιο φάκελο θες, γιατί να μην έχει κάθε πακέτο ενός μεμονωμένου λεξικού ένα σκριπτάκι που να λέει: αν δεν είναι ενεργοποιημένος αυτός ο φάκελος, ενεργοποίησέ τ?
(01:58:25 μμ) alkisg: Τα λεξικά δεν πρέπει να έχουν scripts
(01:58:29 μμ) alkisg: Είναι χαζά, σκέτα δεδομένα
(01:58:37 μμ) alkisg: Θα κάνουν Depends: goldendict-wrapper
(01:58:52 μμ) alkisg: Και ο wrapper θα αναλαμβάνει κεντρικά να διορθώσει τα κακώς κείμενα του goldendict
(01:58:55 μμ) jennie_: ναι, αυτό ακούγεται καλό
(01:59:27 μμ) alkisg: Το βασικό ήταν να βρεθεί ένας τρόπος να τρέχεις πράγματα τη στιγμή που ο χρήστης πάει να τρέξει το goldendict
(01:59:34 μμ) alkisg: Αυτό γίνεται με dkpg-divert και launcher
(01:59:51 μμ) alkisg: Αφού το πέτυχες αυτό, δεν χρειάζονται πολλοί launchers, ένας κεντρικός αρκεί
1 Γνώσεις Linux: Μέτριες ┃ Προγραμματισμού: Ελάχιστες ┃ Αγγλικών: Εξαιρετικές
2 Ubuntu 12.04 LTS σε όλους τους υπολογιστές της οικογένειάς μου
Άβαταρ μέλους
jennie
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 495
Εγγραφή: 24 Δεκ 2008, 13:57
Εκτύπωση


Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι