Soru Kukla kullanarak PPA'dan paket yükleme


Yükleyiciyi önceden yüklenmiş olan VM'leri otomatik olarak sağlamaya çalışıyorum.

Benim varsayılan init.pp şöyle görünüyor:

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
}

Son exec komutu geri döndü (bence başarılı bir apt-get güncellemesi için 100 değeri varsayılan):

bilgi:   / [Ana] Sahne // Apt :: Ppa [ppa: dotcloud / LXC-liman işçisi] / Exec [add-apt-depo-ppa: dotcloud / LXC-liman işçisi]:   Exec [apt_update] bildiriminin yenileme yenilemesi:   / Stage [main] / Apt :: Update / Exec [apt_update] / döner: yürütüldü   başarıyla: / Stage [main] / Apt :: Update / Exec [apt_update]:   1 etkinlikten 'yenileme' tetiklendi

Ancak kutuya taktığımda docker yüklü değil ve çalışıyor apt-get install lxc-docker Sonra yükleyebilirim. Neyi yanlış yapıyorum? Çok sayıda farklı konfigürasyonla çalışmayı başaramıyorum.


8
2017-07-28 22:22


Menşei




Cevaplar:


apt-get kolayca görebildiğiniz gibi başarıda 0 ve hatada 100 döndürür apt-get adam sayfası. Yani bunu geri aldın. Kullanarak iki komutu birleştiriyorsunuz &&Bu, ikinci komutun yalnızca ilk başarıyla tamamlandığında (0 döndürdüğünde) çalıştırıldığı anlamına gelir. Eğer öyleyse apt-get update Yanlışlıkla beklediğiniz gibi, "100" geri dönmek zorunda kaldı, ikinci komut bile koşmazdı.

Ve günlük mesajını dikkatlice okursanız, uygulanan Exec kaynağının "apt_update" olarak adlandırıldığını ve "apt-update" komutunun olmadığını görürsünüz. Eski tanımlanmış apt sınıf ve çalıştırdığınızda apt::ppa kaynak uygulanır. İkincisi, günlük çıktısında da görünen kendi Exec kaynağınızdır, ancak Exec[apt-update]. Bunun için bak.

Her durumda, burada yaptığınız şey işe yaramaz çünkü Kukla'yı yüceltilmiş bir Kabuk betiği olarak kullanmaya ve yanlış yapmaya çalışıyorsunuz. Kukla, manifestoda kaynakları belirttiğiniz sırayı görmezden gelir ve onları uygun gördüğü şekilde uygular. Emin olmak için lxc-docker paket PPA kaynağının paket kaynağından önce uygulandığından emin olmanız için belirtilen PPA'dan yüklenir.

Bunu yapmanın birkaç yolu vardır, bunların hepsi ilişki veya bağımlılık belirttiğinizi içerir. İşte bir yolu, kullanarak zincirleme okları:

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']

Bu demektir ki lxc-docker paket kaynak sonra uygulanacaktır apt::ppa PPA "ppa: dotcloud / lxc-docker" için kaynak uygulandı. Açıklandığı gibi apt::ppa kaynak zaten bir PPA ekledikten sonra APT önbelleğini güncellemekle ilgilenir, bu nedenle açık aramaya gerek yoktur apt-get update herhangi bir yer.


13
2017-07-29 00:37



Hala ihtiyacın var Exec['apt_update'] PPA'dan yüklenen paketlerinizde. Paketten önce PPA talep etmek, Exec ve Paket arasındaki ilişkiyi zorlamaz. - daxlerod


Ve burada alternatif, deyimsel bir cevap 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']
}

1
2017-08-19 19:22