Bir paket yöneticisi .bashrc dosyanızı değiştirmeli mi?


9

Düzgün yürütmek için bir ortam değişkeninin ayarlanmasını gerektiren bir şey için bir paket yazıyorum. Paket yöneticisinin kurulum adımı bir kullanıcının ortamını değiştirmeli mi yoksa kullanıcıdan bunu kendisinin yapmasını mı istemelidir? Sezgim ikincisi olurdu, ama birincisi için argümanlar görebiliyorum.


7
Ortam değişkenine bağımlılığı kaldırarak (ör. Bunun yerine bir yapılandırma dosyası kullanarak) bir şeyin daha iyi davranmasını sağlayabilir misiniz? Bence bu .bashrc, bilgisayar korsanlarının ambalajlanması veya mucking ile tercih edilir .

Elbette, ancak bu sorunun amacı için uygulamayı değiştirmenin bir seçenek olmadığını varsayalım.
David Cowden

1
Kullanıcı çalışmazsa ne olur bash? Çok çeşitli başlangıç ​​dosyalarıyla kullanılabilen birçok alternatif kabuk vardır. Burada ciddi bir alternatif çözüm bulmanızı öneririm.
Jules

10
Bu yüzden etrafına bir sarıcı yazın. Örneğin, tomcatdoğru çalışması için birkaç ortam değişkenine ihtiyaç duyan bakınız ; bunların tümü doğrudan ikili çalıştırılmak yerine çalıştırılan bir başlangıç ​​komut dosyası tarafından ayarlanır.
Jules

1
@Vality biliyorum. Jules'un teklifi zaten önerildi. Ben ciddiyim - ilk önce bir kabuk agnostik çözümü olması gerektiğini iddia sonra dairesel mantık dalga geçiyor sonra çözüm olarak bir kabuk komut dosyası kullanmak önermek devam edin. Bu bir şaka (;
David Cowden

Yanıtlar:


18

Paket yöneticisinin kurulum adımı bir kullanıcının ortamını değiştirmeli mi yoksa kullanıcıdan bunu kendisinin yapmasını mı istemelidir?

Ne. Paket yükleyicileri, paketin sahibi olmadığı bir hesap için ana dizindeki hiçbir şeye dokunmamalıdır. Paketler ayrıca, yapılandırıldıklarında kullanıcının herhangi bir özel çabası olmadan kullanılabilecekleri şekilde yapılandırılmalıdır. (Bunu yapmak istemediğiniz istisnai durumlar vardır, ancak bunlar çok azdır.)

Unixy ortamlarında, kullanıcı her oturum açma kabuğunu başlattığında okunan yapılandırma dosyalarını koymak için bir yer bulunur. Bourne ve C mermileri için, yapılandırmanızı sırasıyla /etc/profileve içine ekleyebilirsiniz /etc/csh.cshrc. (Kaldırırken kaldırmayı unutmayın.)

Birçok sistem, bunu tek tek dosyalar kullanarak yapmayı da destekler, bu da bir dosyada rastgele bir yere metin bırakmak zorunda kalmadan yapılandırma bitleri eklemeyi ve kaldırmayı kolaylaştırır. (Ayrıca, bir paket yöneticisinden aldığınız tüm kontrol ve hesap verebilirlik avantajlarını sağlar.) Bazı dağıtımlar, /etc/profileeşleşen tüm dosyaları okuyacak şekilde yapılandırılır /etc/profile.d/*.sh.


1
Tarihsel olarak, rcbir komut dosyasında adı CTSS'denruncom (Çalıştırma Komutları) türetilir , ancak o zamandan beri diğer anlamları içerecek şekilde genişletilmiştir.
Jeffrey Hantin

1
@JeffreyHantin: Touché. Kaldırıldı.
Blrfl

1
Toplamaya devam profile.detmekten nefret ediyorum, ancak bash içine inşa edilmedi, genellikle sağlanan bir kanca (genellikle distro'nun tabanı) /etc/profile. ;)
Jeffrey Hantin

1
@JeffreyHantin: Yeterince doğru, ancak "Unixy" kelimesini kullanmamla ilgili bir eleştiri olmayacak. :-)
Blrfl

14

Bu değişiklik tüm mesele değilse, kullanıcının yapısını paket yöneticisinden değiştirmek asla kabul edilemez /home.

Bunun ana yaklaşımları:

  • Yapılandırması gereken kullanıcıyı bilgilendirin.
  • Sarf malzemesi varsayılanlarıdır, böylece gerekli değildir
  • Değerleri uygun şekilde ayarlayan bir başlatıcı komut dosyası paketleyin
  • (Dağıtım destekliyorsa) Ortam değişkenini dışa aktaran bir dosya bırakın /etc/profile.d. Bazı linux sistemlerinde, bu dizindeki tüm komut dosyaları varsayılan kabuk kurulumundan kaynaklanır, böylece değişkeni güvenli bir şekilde orada ayarlayabilirsiniz.

7

Soru Bir paket yöneticisinin kurulum adımı kullanıcının ortamını değiştirmeli mi?

Yanıt Hayır. Bu durumda .bashrc dosyası olan bir kullanıcının verilerini değiştirmek kötü bir fikirdir. Kullanıcının verileri bir paket yöneticisi tarafından kutsal kabul edilmeli mi?

Soru Bir paket yöneticisinin kurulum adımı, kullanıcıdan bunu kendisinin yapmasını istemelidir mi?

Cevap Bu çok daha lezzetli bir çözüm ama yine de ideal değil.

Gerekli ortam değişkenlerini ayarlayabileceğiniz ve ondan sonra yürütülebilir dosyayı çalıştırabileceğiniz bir sarıcı kabuk betiği oluşturmanız gerektiğini düşünüyorum.


Ben de bu fikri düşündüm. Proje genç ve bunun gerekli olmaması gereken noktaya gelecek.
David Cowden

@ GlenH7 Yanıtımı güncelledim. Umarım güncellenen cevap aradığınız cevaptan daha fazlasıdır.
R Sahu

@ GlenH7: Bu soru aslında bir XY problemidir: meta.stackexchange.com/questions/66377/what-is-the-xy-problem , burada ortam değişkenlerine olan ihtiyaç çözülmesi gereken gerçek problemdir.
whatsisname

Ayrıca, bu cevabın bir sarıcı komut dosyası oluşturma önerisi, tüm kabuklar için çalışacak tek cevaptır.
whatsisname

1
@MattThomason, aslında soruyu sormamı sağlayan şey aydınlanmadır (;
David Cowden

5

Ağaçlar için ormanı özlüyorsun. Açıkçası, kullanıcı için ortam değişikliğini gerçekleştirmek daha uygundur, ancak aynı zamanda daha riskli ve biraz invazivdir. Kullanıcıya yükleyicinin değiştirip değiştirmeyeceğini sorarak her iki dünyanın en iyilerini birleştirmelisiniz .bashrcve aksi takdirde bunu nasıl yapmaları gerektiği konusunda talimatlar vermelisiniz.


Tavsiye için teşekkürler. Daha önce hiç halka açık bir paket yazmadım ve sadece tabu yapmadığımdan emin olmak istiyorum.
David Cowden

Google bulut SDK'sı bunu bugün ele alıyor. Başlangıç ​​dosyalarınızı değiştirmek isteyip istemediğinizi sorar.
jmq

1

"Kullanıcı" nın tekil olduğunu varsayıyorsunuz. Bu sistemde binlerce kullanıcı varsa ne olur?

Kullanıcının ana dizinini bile bulabileceğinizi varsayıyorsunuz. Kullanıcılar örneğin LDAP üzerinden yönetiliyorsa, geçerli tüm kullanıcıların bir listesini almanıza bile izin verilmeyebilir. Ev dizinleri / ev içinde olmayabilir; ağdan dinamik olarak monte edilebilirler. Kullanıcının giriş dizini şifrelenmiş olabilir ve giriş yapmadığı sırada anahtara erişilemez.

Bunu olası her durumda güvenilir bir şekilde yapmanın bir yolu yoktur. Oturum açarken veya kabukları oluştururken kullanıcılar için ortam değişkenlerini ayarlamak amacıyla dağıtım mekanizmasını kullanın. Bu işe yaramazsa, bir paketleyici yazın. (Sarıcı olabilir ayrıca gerekirse yorumlardaki argümanı ele almak, bir ikili olun).


0

Kendi projeniz tarafından tanımlanan bir pakette global bir değişken ayarlamak kabul edilebilir (ve projenin adı değişkenin adının bir parçası olduğu anlamına gelir!). O zaman bile, kullanıcının .bashrcdosyasına dokunmamalısınız - bunun yerine /etc/profile.d dosyasına bir komut dosyası eklemelisiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.