কেবলমাত্র কোনও প্যাকেজ ইনস্টল করার সময় এবং আপগ্রেড চলাকালীন স্ক্রিপ্টটি কীভাবে চালানো যায়?


14

আমি সম্প্রতি আমার কয়েকটি সফ্টওয়্যার প্যাকেজিং শুরু করেছি এবং এটি লঞ্চপ্যাডে প্রকাশ করতে শুরু করেছি। ইনস্টলেশন এবং অপসারণ সূক্ষ্মভাবে কাজ করে, তবে প্যাকেজ ফর্মটির একটি সংস্করণ পরবর্তী সংস্করণে আপগ্রেড করা সমস্যাযুক্ত।

সমস্যাটি হ'ল কিছু স্ক্রিপ্ট রয়েছে যা প্যাকেজের প্রথম ইনস্টলেশনকালে চালানো দরকার। এই স্ক্রিপ্টগুলি ডিবিকে জনপ্রিয় করে তোলে, একটি ব্যবহারকারী তৈরি করে, ইত্যাদি এগুলিকে বর্তমানে প্যাকেজ.পস্টিনস্ট configure)বিভাগে ডাকা হয় । তবে এটির ফলাফল তাদের আপগ্রেড করার সময় ডাকা হয়েছিল পাশাপাশি ডায়াগ্রামে দেখানো হয়েছে ।

.Deb প্যাকেজে কোনও রক্ষণাবেক্ষণকারী স্ক্রিপ্ট অন্তর্ভুক্ত করার কোনও উপায় আছে যা কেবলমাত্র প্যাকেজটির প্রথম ইনস্টলেশনকালে সঞ্চালিত হয় এবং আপগ্রেডের সময় নয়? অথবা .deb প্যাকেজে কিছু প্রাথমিক সেটআপ স্ক্রিপ্টগুলি অন্তর্ভুক্ত করার একটি মার্জিত উপায় কী হবে?

উত্তর:


15

একটি debian/preinstফাইলের সাহায্যে আপনি ইনস্টলটিতে ক্রিয়া সম্পাদন করতে পারেন তবে আপগ্রেড করতে পারবেন না।

#!/bin/sh
set -e

case "$1" in
    install)
        # do some magic
        ;;

    upgrade|abort-upgrade)
        ;;

    *)
        echo "postinst called with unknown argument \`$1'" >&2
        exit 0
        ;;
esac

#DEBHELPER#

exit 0

যদিও নামটি বোঝা যাচ্ছে, এটি আপনার প্যাকেজ ইনস্টল করার আগেই চালিত হবে। সুতরাং আপনি এখানে যা প্রয়োজন তা করতে পারবেন না। বেশিরভাগ প্যাকেজগুলি postinstইতিমধ্যে ব্যবহারকারীর তৈরি করা থাকলে কনফিগার পর্যায়ে পরীক্ষা করে । এখানেcolord

$ cat  /var/lib/dpkg/info/colord.postinst
#!/bin/sh

set -e

case "$1" in
    configure)

# create colord group if it isn't already there
    if ! getent group colord >/dev/null; then
            addgroup --quiet --system colord
    fi

# create the scanner group if it isn't already there
    if ! getent group scanner >/dev/null; then
        addgroup --quiet --system scanner
    fi

# create colord user if it isn't already there
    if ! getent passwd colord >/dev/null; then
            adduser --system --ingroup colord --home /var/lib/colord colord \
        --gecos "colord colour management daemon"
        # Add colord user to scanner group
        adduser --quiet colord scanner
    fi

# ensure /var/lib/colord has appropriate permissions
    chown -R colord:colord /var/lib/colord

    ;;
esac    



exit 0

28

রক্ষণাবেক্ষণকারী স্ক্রিপ্টগুলি কীভাবে বলা হয় সে সম্পর্কে ডায়বিয়ান উইকি থেকে এই চিত্রটি দেখুন : দেবিয়ান রক্ষণাবেক্ষণকারী স্ক্রিপ্ট ফ্লোচার্ট

আপনি যদি বাম পাশের দিকটি অনুসরণ করেন ("সবকিছু ঠিকঠাক হয়" পথ) আপনি দেখতে পাবেন যে postinstস্ক্রিপ্টটি অতি সম্প্রতি কনফিগার করা সংস্করণ দিয়ে ডাকা হয়েছে। এটি আপনাকে একটি আপগ্রেড এবং একটি নতুন ইনস্টল মধ্যে পার্থক্য করার সুযোগ দেয় - আপগ্রেড ক্ষেত্রে আপনার পোস্ট-ইনস্টের মতো বলা হবে

postinst configure 1.23-0ubuntu1

1.23-0ubuntu1আপনার প্যাকেজটির পূর্বে ইনস্টল করা সংস্করণটি কোথায় , তাজা ইনস্টল করার জন্য এটির মতো বলা হবে

postinst configure

এটি আপনাকে যখন কোনও বিশেষ সংস্করণ থেকে আপগ্রেড করার সময় কোনও ক্রিয়া সম্পাদন করার প্রয়োজন হয় তখন আপনি কেসটি পরিচালনা করতে পারবেন - আপনি postinstসেই সংস্করণটির জন্য পরীক্ষা করতে পারেন ।

স্ক্রিপ্টটি কোনও 'ইনস্টল' বা 'আপগ্রেড' -তে করা হচ্ছে কিনা তা পরীক্ষা করা সহজ করে তোলে। যদি $ 2 টি নাল হয়, তবে এটি একটি ইনস্টল। তাই:

if [ -z "$2" ]; then
  do install stuff
else
  do upgrade stuff
fi

1
মনে রাখবেন যে আপনি প্যাকেজটি সরিয়ে ফেলেছেন (তবে এটি শুদ্ধ হয়নি) এবং আবার ইনস্টল করলে অতিরিক্ত প্যারামিটারটিও পাস হয়ে যায়।
স্ক্রাইকিং

3

আপনি পোস্টিনস্টের সাথে একত্রে কোনও ডেবিয়ান / প্রিনস্টের স্ক্রিপ্ট ব্যবহার করতে সক্ষম হতে পারেন।

পূর্বপরিচিত স্ক্রিপ্টে, আপনার পিকেজি অবশ্যই ইনস্টল করা কোনও ফাইলের জন্য পরীক্ষা করুন। যদি এটি উপস্থিত থাকে তবে কিছুই করবেন না (কারণ আপনার প্যাকেজটি আগে ইনস্টল করা হয়েছিল), অন্যথায়, আপনার সেটআপের পদক্ষেপগুলি করুন।

যদি আপনার সেটআপ ধাপগুলির জন্য আপনার পিকেজি ইনস্টল করা প্রয়োজন হয় (যে ক্ষেত্রে উপরেরটি কাজ করবে না কারণ ইনস্টলেশনের আগে প্রিনস্ট ইনস্টল করে) তবে আপনার প্রিনস্টের স্ক্রিপ্ট কোনও ফাইল লিখতে পারে, উদাহরণস্বরূপ: / tmp / setupmypkg। আপনার পোস্ট-ইনস্ট্রিপ্ট স্ক্রিপ্টটি কেবল সেই ফাইলটি উপস্থিত রয়েছে কিনা তা পরীক্ষা করতে পারে এবং যদি তাই হয় তবে দুটি জিনিস করুন:

  • আপনার প্রাথমিক সেটআপ পদক্ষেপ
  • / tmp / setupmypkg ফাইলটি মুছুন

1
হ্যাঁ এটি কাজ করবে এবং আমি বর্তমানে অনুরূপ কিছু করছি। তবে এটি এখনও কিছুটা হ্যাকি মনে হচ্ছে ... আমি এটি করার আরও স্থানীয় উপায়ের জন্য আশা করছিলাম। এমন বিদেশী অনুরোধটি ঠিক মনে হচ্ছে না?
জেরোইন

1

আমি দেখতে পেয়েছি যে আপনার "পোস্টইনস্ট কনফিগার" স্ক্রিপ্টে $ 2 এর জন্য পরীক্ষা করা ঠিকমত কাজ করে না যদি আপনি ইতিমধ্যে একবার আপনার প্যাকেজটি ইনস্টল করেছেন, তবে এটি আনইনস্টল করুন (তবে শুদ্ধি না করে) আবার পুনরায় ইনস্টল করার চেষ্টা করুন। এই ক্ষেত্রে, পোস্ট-ইনস্ট্রিপ্ট স্ক্রিপ্টটি এখনও "পোস্টিনস্ট কনফিগার" পদক্ষেপের জন্য একটি সংস্করণ যুক্তি পায়।

তবে আপনি যদি প্যাকেজটি আগে ইনস্টল করেন, তবে এটি মুছে ফেলুন এবং পুনরায় ইনস্টল করুন, আবার ইনস্টল করুন, "পোস্টইনস্ট কনফিগার করুন" স্ক্রিপ্টটি $ 2-এ কোনও সংস্করণ যুক্তি পাবে না


0

আমি মনে করি না তবে প্রথমবারের জন্য প্যাকেজ ইনস্টল করা হচ্ছে কিনা তা পরীক্ষা করতে আপনি প্রিনস্ট / পোস্টিনস্ট স্ক্রিপ্টগুলি সহজেই সংশোধন করতে পারেন এবং মানক পদক্ষেপ নিতে পারেন।

এরকম কিছু হতে পারে,

প্রিনস্টে।

if not is_package_istalled():
    export MY_PACKAGE_FIRST_INSTALL

পোস্টিনস্টে,

if MY_PACKAGE_FIRST_INSTALL:
    Do First Install Setup 

সম্পাদন করা

হুম, আপনি কেবল পোস্টিনস্টে সরাসরি এই সমস্ত কিছু পরীক্ষা করতে পারেন কারণ আমি মনে করি পোস্টপিন্ট কার্যকর করার আগে ডিপি কেজি প্যাকেজটির স্থিতি হিসাবে সেট করবে না তবে আমি নিশ্চিত নই। সুতরাং উপরের আসতে পারে,

পোস্টিনস্টে,

if not is_package_istalled():
    Do First Install Setup 

যেখানে, is_package_installed আপনি ইনস্টলেশন অবস্থা সনাক্ত করতে ফাংশন হতে পারে। 'Dpkg --status প্যাকেজ নাম' এর মতো কিছু হতে পারে

অথবা

আপনি যে পরিবর্তনগুলি করতে চান তা ইতিমধ্যে সেখানে রয়েছে এবং কেবল যদি তা না হয় কেবল কেবল কেন তা যাচাই করবেন না।


আমি বুঝতে পারছি না। আইএসপিওস্টাল কোথা থেকে আসে?
জেরোইন

কোনও আইএসপিওস্টাল্ড নেই, এটি কেবল ছদ্ম কোড। শুধু একটি উদাহরণ। ISDPSTALLED 'dpkg --status প্যাকেজ_নাম' এর মতো একটি কমান্ডের আউটপুট হতে পারে আমার অর্থ কি ছিল আপনি প্যাকেজটি প্রিনস্টে ইনস্টল করা আছে কিনা তা পরীক্ষা করে দেখতে পারেন, একটি রাজ্য ভার সেট করে এবং তারপরে এই অবস্থার ভিত্তিতে পোস্ট-ইনস্টে পদক্ষেপ নিতে পারে।
ওয়েস লোন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.