পুতুল ব্যবহার করে পিপিএ থেকে প্যাকেজ ইনস্টল করা হচ্ছে


8

আমি পূর্বে ইনস্টলড ডকার সহ ভিএমগুলি স্বয়ংক্রিয়ভাবে সরবরাহ করার চেষ্টা করছি।

আমার ডিফল্ট init.pp দেখতে দেখতে:

class { 'apt':
 always_apt_update    => true,
}

package { [
    #'build-essential',
    #'vim',
    #'curl',
    #'zsh',
    #'git-core',
    #'htop',
    #'wget',
    #'linux-image-generic-lts-raring',
    'python-software-properties'
    #'lxc-docker'
  ]:
  ensure  => 'installed',
}

apt::ppa { 'ppa:dotcloud/lxc-docker':}

# refresh apt source
exec { "apt-update":
  command => "/usr/bin/apt-get update && apt-get install lxc-docker --force-yes",
  returns => 100
}

সর্বশেষ নির্বাহী কমান্ড প্রত্যাবর্তন করে (আমার মনে হয় সফল এপ-গেট আপডেটের জন্য 100 ফিরিয়ে দেওয়া ডিফল্ট):

তথ্য: / পর্যায় [মূল] // এপিটি :: পিপিএ [পিপিএ: ডটক্লাউড / এলএক্সসি-ডকার] / এক্সিকিউ [অ্যাড-এপ-রিপোজিটরি-পিপিএ: ডটক্লাউড / এলএক্সসি-ডকার]: এক্সিকিউটের শিথিলকরণ রিফ্রেশ [অ্যাপটি_আপডেট] নোটিশ: / পর্যায় [প্রধান] / এপিটি :: আপডেট / এক্সিকিউট [অ্যাপটিপুডেট] / রিটার্ন: কার্যকরভাবে সম্পাদন করা হয়েছে বিজ্ঞপ্তি: / পর্যায় [প্রধান] / এপটি :: আপডেট / এক্সিকিউটিউট [অ্যাপটি আপডেট]: 1 ইভেন্ট থেকে ট্রিগারড 'রিফ্রেশ'

যাইহোক আমি যখন বাক্সটিতে প্রবেশ করি তখন ডকার ইনস্টল করা হয় না এবং চলতে থাকে apt-get install lxc-dockerতখন আমি এটি ইনস্টল করতে পারি। আমি কি ভুল করছি? আমি এটিকে বিভিন্ন কনফিগারেশনের প্রচুর পরিমাণে কাজ করে দেখছি না।

উত্তর:


13

apt-getসাফল্যে 0 এবং ত্রুটিতে 100 প্রদান করে আপনি apt-getম্যান পৃষ্ঠা থেকে সহজেই দেখতে পাবেন । সুতরাং আপনি যে পিছনে পেয়েছেন। আপনি দুটি কমান্ড ব্যবহার করে একত্রিত করছেন &&, যার অর্থ দ্বিতীয় কমান্ড কেবল তখনই চালিত হবে যখন প্রথমটি সফলভাবে শেষ হবে (0 ফিরে)। সুতরাং যদি apt-get updateআপনি "100" ফিরিয়ে দেন, যেমনটি আপনি ভুলভাবে প্রত্যাশা করেছেন, দ্বিতীয় কমান্ডটিও চলবে না।

এবং আপনি যদি লগ বার্তাটি মনোযোগ সহকারে পড়েন তবে আপনি দেখতে পাবেন যে প্রয়োগ করা সংস্থানটির নাম দেওয়া হয়েছে "apt_update" এবং "apt-update" নয় " প্রাক্তনটিকে aptশ্রেণিতে সংজ্ঞায়িত করা হয় এবং apt::ppaসংস্থানটি প্রয়োগ করা হলে চালানো হয়। পরেরটি হ'ল আপনার নিজস্ব নির্বাহী উত্স, যা লগ আউটপুটে প্রদর্শিত হবে, কিন্তু হিসাবে Exec[apt-update]। তার জন্য দেখুন

যাই হোক না কেন, আপনি এখানে যা নির্মাণ করেছেন তা কার্যকর হয় না কারণ আপনি পুতুলকে মহিমান্বিত শেল স্ক্রিপ্ট হিসাবে ব্যবহার করার চেষ্টা করছেন এবং এটি ভুল করছেন। পুতুল ক্রমটি অগ্রাহ্য করে যাতে আপনি ম্যানিফেস্টে সংস্থানগুলি নির্দিষ্ট করেন এবং পরিবর্তে এটি উপযুক্তভাবে দেখায় them সুতরাং lxc-dockerনির্দিষ্ট পিপিএ থেকে প্যাকেজটি ইনস্টল হয়ে গেছে তা নিশ্চিত করার জন্য আপনাকে প্যাকেজ সংস্থার আগে পিপিএ রিসোর্স প্রয়োগ করা হয়েছে তা নিশ্চিত করতে হবে।

এটি করার কয়েকটি উপায় রয়েছে, এর মধ্যে জড়িত সমস্তগুলি যে আপনি সম্পর্ক বা নির্ভরতা নির্দিষ্ট করে। চেইনিং তীরগুলি ব্যবহার করে এখানে একটি উপায় রয়েছে :

class { 'apt':
 always_apt_update => true,
}

apt::ppa { 'ppa:dotcloud/lxc-docker':}

# Your regular packages don't know or care about the PPA
package { [
    'build-essential',
    'vim',
    'curl',
    'zsh',
    'git-core',
    'htop',
    'wget',
    'linux-image-generic-lts-raring',
    'python-software-properties'
  ]:
  ensure  => 'installed',
}

# We single lxc-docker out to be able to specify 
# the relationship to Apt::Ppa properly
package { 'lxc-docker':
  ensure => 'installed'
}

Apt::Ppa['ppa:dotcloud/lxc-docker'] ->
Package['lxc-docker']

এর অর্থ পিপিএ "পিপিএ: ডটক্লাউড / এলএক্সসি-ডকার" lxc-dockerপ্রয়োগ করার পরে প্যাকেজ সংস্থান apt::ppaপ্রয়োগ করা হবে। যেমনটি ব্যাখ্যা করা হয়েছে apt::ppaরিসোর্সটি ইতিমধ্যে পিপিএ যুক্ত করার পরে এপিটি ক্যাশে আপডেট করার বিষয়ে যত্ন নিয়েছে, সুতরাং apt-get updateকোথাও স্পষ্টভাবে কল করার প্রয়োজন নেই ।


আপনার এখনও Exec['apt_update']পিপিএ থেকে ইনস্টল হওয়া আপনার প্যাকেজগুলির প্রয়োজন । প্যাকেজটির আগে পিপিএর প্রয়োজনীয়তা প্রয়োগ এবং প্যাকেজের মধ্যে সম্পর্ক কার্যকর করে না।
daxlerod

1

এবং এখানে একটি বিকল্প, আইডিয়োমেটিক উত্তর ব্যবহার করে require:

class { 'apt':
 always_apt_update => true,
}

apt::ppa { 'ppa:dotcloud/lxc-docker':}

package { [others]: }    

package { 'lxc-docker':
  ensure  => 'installed',
  require => Apt::Ppa['ppa:dotcloud/lxc-docker']
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.