Linux'a gerçekten bir tar.gz dosyası nasıl yüklenir - elle kurulan (veya bağımsız) uygulamaları nasıl yönetirim?


12

Paketleri ve .debs açıklayan tüm bu bağlantıları görüyorum ... Biliyorum ... ve tar.gz dosyalarını çalıştırmak için birçok kludges vardır (örneğin: Java için güncelleme-alternatifleri veya / usr / local / bin (veya saatler süren aramalardan çıkardığım başka bir yerde)). Paketler çok akıllıysa, paketler veya .debs / rpms'de bu kadar az Linux uygulaması nasıl bulunur?

Yeni bir kullanıcı olarak konuşuyorum; Uzmanların muhtemelen daha iyi bildiğini biliyorum (Sanırım Eclipse'in derlenebilir bir sürümünü indirebilir miyim?). Netbeans ve krom gibi .sh, tutulma sade, lansmanı yapılabilir bir dizin, Java bu update-alternativesişi gerektirir, ancak kendini Ubuntu / Debian'ın "programlar listesine" kaydettiğini sanmıyorum (sadece bir komut olarak kaydeder), vb. bazen depolarda kullanılabilir, ancak indirme sayfalarının neden doğru açıklamalara sahip olmadığı konusunda kafam karıştı).

Uzun lafın kısası: Bir tar.gz dosyasını indirir veya derlerseniz, dosyayı sisteme nasıl kaydederim? update-alternativesbir komut olarak kaydedilmiş gibi görünüyor, Ubuntu'da arama çubuğunda görünmüyor. Debian'da, GNOME 2 başlatıcısına manuel olarak bir kısayol ekleyebilirim. Ama gerçekten ne yapmalıyım?


Düzenle:

Bu yüzden yeni çözümlerle biraz daha oynadıktan sonra, "problemimi" iyileştirebilirim:

Manuel olarak yüklenen programlarımı nasıl yönetmeliyim? Firefox ve Eclipse şu ana kadarki tek örneklerim (çok fazla şey indirmiyorum). İkisi de sevdiğim kutuyu bitirebilir. Ancak, bunları nereye kurmalıyım? Eclipse'nin kendi talimatları olduğunu görüyorum, ancak tüm "manuel paketlerimi" aynı şekilde yapmayı tercih ederim.

  1. Biraz araştırma yaptıktan sonra bu programları uygulamaya karar verdim /usr/local/bin.
  2. Gönderen tutulmayı nasıl kurulacağı , ben başlatıcısındaki göstermek için bir şey almak için, Kesinlikle çok koymalıyız xxx.desktopdosyayı ~/.local/share/applications/. Bu .desktop dosyasının adı önemli mi?
  3. Autotools ile şeyler (bir configureveya unix/configuredosya ararım ) iyi çalışır. CheckInstallTüm bunları takip etmek için kullanmam gereken bazı araştırma noktaları .
  4. update-alternativesYolları kaydetmek için kullanmalıyım . Bundan java parçacığı ben bir bağlantı oluşturmak gibi görünüyor /usr/bin/javaiçin /usr/lib/jvm/jdk.... Eclipse veya Firefox gibi bu "bağımsız" uygulamaları yüklediğimde, her zaman bağlantı kurmalı mıyım /usr/bin/[app]? Ve eğer iddia 1 doğruysa,sudo update-alternatives --install "/usr/bin/[app]" "[app]" "/usr/local/bin/[app]" 1

Bu talimatlar doğru mu / manuel kurulumları yönetmenin iyi bir yolu mu? İzlemem gereken başka adımlar var mı? Diğer öneriler?


1
*.debBunun yerine neden bir paket aramıyorsunuz ?
m0nhawk

@ m0nhawk Her zaman bir .deb dosyası bulamıyor musunuz? Eclipse'ın indirme sayfasında olduğu gibi sadece tar.gz. Tamamen
özlemediğim

1
Eclipse için kesinlikle Debian için bir paket var ( Ubuntu için ). Ve işlemek için en iyi yol olduğunu düşünüyorum *.tar.gz: Yazılım uygun paketi oluşturmaktır *.rpm, *.debvb
m0nhawk

1
.desktopMenüde bir şey görünmesi için bir dosyaya ihtiyacınız var. update-alternativessadece önceliklerinizi belirlemek için çalışır PATH.
tripleee

1
Sorunuz hala genel olarak "WRT linux ne yapmalıyım" değil, _____ belirli bir masaüstü ortamı olduğunda "______ ile yeni yazılım kaydetmek için ne yapmalıyım" ile ilgilidir. Artı, belki, $ PATH ortam değişkeni ile ilgili zımni bir cehalet?
goldilocks

Yanıtlar:


15

Paket depolarında neden birçok uygulama yok?

Bunun birçok nedeni olabilir:

Tek bir nedeni yok. En sevdiğiniz uygulamayı dağıtımınızın paket yöneticisinde görmek istiyorsanız her vakayı ayrı ayrı ele almalısınız. Geliştiricilerle (örneğin bir IRC kanalında veya posta listesinde) iletişim kurmaya çalışın ve ambalajlamaya nasıl yardımcı olabileceğinizi sorun.

Bir tarball nasıl kurulur?

Bir tarball (.tar.gz paketi) herhangi bir şey içerebilir. Gerçekten açana kadar, nasıl kuracağınızı varsaymanın hiçbir yolu yoktur. Yine, her pakete farklı şekilde yaklaşılmalıdır.

Belgelere bakın! Herhangi bir (yarı) iyi paket, uygulamanın nasıl kurulacağına ilişkin talimatlar sağlayacaktır. İlk refleksiniz her zaman README, INSTALL veya benzeri bir metin dosyası aramak olmalıdır. Yayıncının web sitesine bakmak da yardımcı olabilir.

Her paket farklı olduğu için dünyadaki her tarball'ı işlemenin evrensel bir yolu yoktur. Bu, dünyadaki tüm malzemeler üzerinde çalışan bir tarif istemek gibi. Olmuyor.

Sisteminiz, dağıtımınız ve masaüstü ortamınız hakkında iyi bir bilgi sahibi olmanız yardımcı olacaktır, bu nedenle bu güven verici ise, linux dünyasında zaman geçirirken işler daha tahmin edilebilir görünecektir.

Özel bir durum: Autotools

Projeler büyüdükçe, kaynak koddan ikili dosyaya sisteme tam kurulum yapmak için kolay yollar sağlamaları gerekir. Bu yüzden gömülü bir yapı sistemi, gerekli olan komut dosyaları koleksiyonu ile birlikte gönderilirler.

Linux / Açık Kaynak / Özgür Yazılım dünyasında, bir derleme sistemi daha geniş bir kabul görmüştür : GNU Autotools . (N open) kaynak paketiyle ilgilenirseniz, Autotools'u kullanma şansınız çok yüksektir.

En basit durumda, otomatik araçlarla paketlenmiş bir uygulamanın nasıl yükleneceği aşağıda açıklanmıştır:

  • ./configure: Sisteminize karşılık gelen Makefiles'ı oluşturacak bir komut dosyası (genellikle bağımlılıkların kullanılabilirliğini de denetler).
  • make: Kaynak kodunu daha önce oluşturulan Makefiles'a göre derleme.
  • make install: İkili dosyaları uygun yerlere kopyalar, sembolik bağlantılar ve geliştirici tarafından tanımlanan diğer tüm adımları oluşturur.

notlar

  • configurekomut dosyaları genellikle hangi derleyicinin kullanılacağı veya hedef dizinin nasıl tanımlanacağı gibi birçok seçeneğe sahiptir. Esnekliğe ihtiyacınız varsa, bakmaya değer ./configure --help.
  • Autotools olduğundan emin olsanız ve gerçekten iyi biliyor olsanız bile, her zaman belgeleri okuyarak başlayın (README, INSTALL, ...)

Sorudaki güncellemenin cevabı

İstediğinizin kesin bir cevabı yok. Buradaki herkes neyin "iyi uygulama" teşkil ettiğini düşünebilir, ancak günün sonunda sizin için neyin işe yaradığını yalnızca siz bulabilirsiniz . Kolay bir cevap olsaydı soruyu sormazdın. Dağıtımınız sizin için cevap verirdi.

Bu söyleniyor, işte birkaç kişisel açıklama.

  • Sistemimde, /usr/local/binpaket yöneticim tarafından kurulan paketleri ayırıyorum. Elle derlediğim / kurduğum her şey içeri giriyor /opt. Bu bir detaydır, ancak aynı programın çeşitli sürümleriyle uğraşırken büyük baş ağrılarından kaçınmaya yardımcı olur.

  • xxx.desktopve genel olarak GUI sorunları kullandığınız masaüstü ortamına özgüdür. Sisteminiz için çalışıyorsa, harika. Ancak Unix'te bulunan tüm ortamlar için genelleştirilemez.

  • /usr/local/binzaten PATH'nizde olma avantajına sahiptir . Başka bir dizin kullanmak istiyorsanız ( /optönerdiğim gibi ), PATH'nize eklediğinizden emin olun. Bunu nasıl yapacağınızı bilmiyorsanız, bir terminal açın ve aşağıdakileri bir terminalde yürütün (bunu yapmanın en güzel yolu değil, ancak sisteminiz hakkında hiçbir şey bilmeden, başka bir şey öneremem):echo 'export PATH=$PATH:/opt' >> ~/.bashrc


Detaylı cevap için teşekkürler. Beniokuları inceledim ama her seferinde farklı bir şey yapmak istemediğime karar verdim. Bu yüzden çok daha fazla araştırma, deneme ve hayal kırıklığı yaşadıktan sonra daha somut bir soru / şartname buldum - güncellenmiş gönderiye bakın.
Raekye

Rica ederim, umarım yardımcı olur :) Güncellemelerinize hitap etmek için cevabımı düzenledim. Bir şeyler yapmak için "Tek Doğru Yol" olmadığını unutmayın ( emacskullanıcı değilseniz hariç ). Farklı yaklaşımların her birinin faydalarını ve dezavantajlarını zamanla öğrenmek için deneme yanılma sürecinden geçmelisiniz.
rahmu

Güncelleme için teşekkürler! Kesinlikle öyle. Tahmin ediyorum xxx.desktopgenelde Gnome için çalışıyor. update-alternativesYolu ayarlamak için kullanma hakkında ne biliyorsunuz ?
Raekye

1
Bildiğim kadarıyla, genel bir yazılımla başa çıkmanın Debian'a özgü bir yoludur, örneğin birden çok tarayıcı veya düzenleyiciye sahip olmak. (Ubuntu ve Mint Debian'a dayanmaktadır ve bunu devralmıştır). İlgileniyorsanız daha fazla bilgi
rahmu

Mükemmel cevap. Genellikle gerekli olan (veya en azından tercih edilen) bir şey, son adım olarak (güvendiğiniz bir paketle) bir sudo make install yapmaktır. Bu, işleme, kullanıcının sahip olmadığı sistem dizinlerine bir şeyler koyması için gereken izinleri verir (/ usr / bin gibi).
Joe

8

Ben bunu "kayıt" istediklerini kendinle açıklamak zorunda düşünüyorum ile .

Açıklamak - ve ben akıllı alecky olmaya çalışmıyorum - "linux", tabii ki, çekirdek ve çekirdek init ötesinde herhangi bir kullanıcı alanı yazılımı hakkında ne bilemez ne de herhangi bir ilgi var. Peki burada neden bahsediyoruz?

Bir dizi farklı dağıtımdan bahsediyorsunuz. Bazen dağıtımda mevcut olsa bile kaynaktan yazılım geliştiriyorum çünkü dağıtım ikili dosyasında ayarlanmayan bazı yapılandırma seçenekleri kümesi istiyorum. Bununla ilgili tek sorunum, paketin başka bir şey için önkoşul olması durumunda , dağıtım paketini yanlışlıkla oluşturduğum paketin üzerine yüklemekten kaçınmak için gerçekten paketleme sistemine kaydetmem gerekiyor. Fedora / rpm tabanlı sistemlerde bu ile yapılır rpm -i --justdb <package>. Bunu debian / apt tabanlı sistemlerde yapmıyorum; bunun yerine kurulumları sadece gerektiğinde zorlarım, belki de tembel - bunu yapmanın daha hoş bir yolu var gibi görünüyor, her türlü ön koşulu yerine getiriyormuş gibi davranan kukla bir paket oluşturarak. Bu m0nhawk'ın aslında .tar.gz kaynağından bir paket oluşturma önerisi çizgileri boyunca - biraz daha basit (Dürüst olacağım ve m0nhawk'ın önerisini hiç sevmediğimi söyleyeceğim).

Paketleme sistemiyle ilgili başka sorunların da olduğu anlaşılıyor. Masaüstü ortamından (örneğin, Gnome) bahsetmiş olsanız da, bunların ne olduğu açık değil. Bunlar heterojendir, bu yüzden "linux'da bunu nasıl yaparım" sorusuna hiç kimse cevap vermez - hatta "bunu ubuntu'da nasıl yaparım" veya "bunu nasıl yaparım" gentoo "-" gnome masaüstünde bunu nasıl yaparım "ya da" bunu XFCE masaüstünde nasıl yaparım "vb. bir soru. Aklımda, tek sorun bahsettiğiniz fırlatma meselesi, ki ben her DE'nin bunu yapmak için basit bir yol sunduğuna inanmak isteriz (ancak bunlar tamamen aynı olmayacaktır, çünkü bunlar farklıdır).

Ardından, init sistemi tarafından yönetilen hizmetler vardır (örn. Systemd veya uptart). Dolayısıyla bu soru aslında aşağıdakilerle ilgili bir dizi ilgili sorudur:

  • paketleme sistemi, örneğin, apt veya yum
  • init sistemi, ör. systemd veya uptart
  • masaüstü ortamı, ör. kde veya birlik
  • dosya okuyucu, örneğin, nautilus veya konqueror
  • ?????

(Her ne kadar sebeplerinden biri tek bir basit birleşik bir çözüm olamaz XDG standart olabilir basit birleşik bir işletim sistemi olmadığını "linux" böyle bazı bölümlerini sağlamak) ve kullanıcılarına büyük çoğunluğu bu şekilde tercih düşünün. Sık sık DE kullanmıyorum ve asla birlikte geldikleri dosya tarayıcısını kullanmıyorum vb.

Yine, ben gerçekten bu konuda yardımcı olmaya çalışıyorum ve sadece mantıklı değil: burada çözmek istediğiniz sorunlar varsa, bu sorunların ne olduğunu ve hangi yazılımların gerçekte bunlarla ilgilendiğini (sadece "linux'un ötesinde) düşünmelisiniz. ") bunları çözmek istiyorsanız.


"dağıtımda ikili" <- / me kaynak tabanlı dağıtımlar hakkında bir şeyler mırıldanıyor
njsg

Ayrıca, XDG standardıyla ilgili bir problem, muhtemelen bazı yukarı akışların hiç umursamaması ve dağıtım geliştiricilerinin .desktopdosyalarını sağlayanlardır , bu tür görevler için bunlar gereklidir.
njsg

Memba geliştiricilerinin bununla ilgilenip ilgilenmeyeceğini bilmiyorum. Eğer son kullanıcı için kullanılabilir çünkü ben sadece XDG söz sen onu kullanmak istiyorum. Heterojenliğin bir bedeli, kaçınılmaz olarak kullanıcıya, örneğin OSX'e sahip olmayacakları bir sorumluluk yükü getirmesidir. Bazı linux dağıtımları bunu diğerlerinden daha fazla en aza indirmeyi amaçlar ve seçim yapmakta özgürsünüz, ancak sonuçta bu modelden gerçekten rahatsız olan insanların sadece linux kullanmamaları gerektiğinden emin değilim - neden kullanmak istediklerinden emin değilim aslında ilk etapta.
goldilocks

Daha iyi bir soru formüle ettim - manuel olarak yüklenen uygulamalarımı nasıl yönetmeliyim? Eclipse ve Firefox gibi, genellikle karmaşık bağımlılıklar olmadan çalışır (böylece kendim ayarlayabilir ve paketi indirebilirsiniz). Sizin veya başka birinin belirttiği gibi bağımsız olarak çalışırlar, ancak bunları dosya sistemimin çevresinde bırakmak yerine bu uygulamaları takip etmeliyim? (Güncel soruya bakın)
Raekye

Raekye: Size haller dışında, yönetmek için bir şey ya da / usr / local kaynaktan yüklenen şeyler "tutmak track" yapmak zorunda kalmamasıdır benim açımdan, herhangi bir fark yapmaz sen istemek ne olursa olsun için senin amaçları vardır. $ PATH'de derlemenin ve kurmanın ötesinde, evrensel bir linux kaydı yoktur, çünkü böyle evrensel bir yaklaşımın amacı yoktur. Sanırım sadece bir şeyleri kaçırdığınızdan endişeleniyorsunuz - yapmadı. Katransızsın, sen configure, sen make install. İşte bu kadar. Bundan sonraki her şey kişisel tercih meselesidir.
goldilocks

5

Ben genel sorunun temel nedeni kendi başına bir Linux sistemi böyle bir "kayıt defteri" içermiyor olduğunu düşünüyorum. Bir şey çalıştırmak için gerçekten ihtiyacınız olan tek şey yürütülebilir bir dosyadır. Yürütülebilir dosyanın tam yolunu belirtmek istemiyorsanız, çoğu kabuk bunları ortamlarınızda $ PATH değişkeninde listelenen dizinlerde arayacaktır. Bağlantılı kütüphanelerle biraz daha karmaşık hale gelebilir, ancak normalde bu kadar ileri gitmenize gerek yoktur.

Linux'un farklı dağıtımları çeşitli dosya sistemi düzenlerinde ve paket yönetim sistemlerinde standartlaştırılmıştır, sorun burada yatar. Redhats rpm kullanır , Debians / Ubuntu deb paketleri kullanır. Arch kendi yolunda gitti . Bir yazılım projeleri perspektifinden bakıldığında, bir dağıtımın içine dahil olmak istemiyorsanız, kullanıcı tabanınız tamamen bir dağıtımda veya herkes için kurulum kolaylığı amaçlayan ticari bir üründür, muhtemelen binaya aramaya başladığınız tek nokta çeşitli paketler.

Aslında, birlikte inşa edilen bir tar.gz kaynağı gccmuhtemelen ortak bir "Linux paketinin" en iyi tanımıdır. Bazı GNU yardımcı programlarına ve GCC'ye sahip bir Linux çekirdeği, alabileceğiniz Linux tabanlı işletim sistemlerinin tüm farklı lezzetleri arasındaki ortak payda hakkında.

Aradığınız kadar özel bir şey olmadığı için "çok az" şeyler paket olarak kullanılabilir diyerek kadar gitmek olmaz. (veya distribütör, tüm bu paket yaygarasıyla uğraşmamayı seçti mi? Chrome ve kendi güncelleme işlemi gibi). Orada o kadar vardır birçok paketler etrafında öylesine için birçok farklı paket sistemleri için pek çok mimarileri onun çok özgür yazılım için değil komik .

Linux dağıtımınız için paket olarak sağlanmayan bir şey oluşturduysanız veya paket olarak oluşturma seçeneğini destekliyorsanız, bunu gerçek bir paket olarak "kaydetmenin" en iyi yolu, bunun için bir paket oluşturmaktır. dosyalar seçtiğiniz paket sistemine göre gitmeli ve bu şekilde yüklenmelidir. Bir ruh olun ve paketleme çalışmalarınızı projeye geri getirin, böylece diğerleri bundan faydalanabilir.

Orada çeşitli kılavuzlarını hakkındaki web paketleri bina . Debian bunlardan biri .

Yapmak istediğiniz tek şey derlenmiş bir paket çalıştırmak ise, belki ikili yolu eklemek $PATH?

Başka bir şey yapıyorsanız, nedir?


"Tüm yapmak istediğiniz derlenmiş bir paket çalıştırmak ise, belki ikili yolu $ PATH için eklemek?" <- Sanırım herhangi bir aklı başında kurulum prosedürü (diyelim, make installya da benzeri) en azından altında bir symlink kuracaktı /usr/bin/, eğer herşeyi altına /
kurmazsanız

Çoğunlukla, --prefix=/elsewhereözel yapıları normal ağaçtan uzak tutmak için çok şey yapmamdan kaynaklanıyor.
Matt

1
Genellikle kullanarak tar make installiçin kuracaktır/usr/local/bin
shadur

0

Ben de ~/bin/yerine symlink olduğunu eklemek istiyorum /usr/bin. *.desktopdosyaları ~/.local/share/applications/veya içine yerleştirilebilir /usr/share/applications/. Yalnızca bilgisayarımı kullanıyorum ve sistem dosyalarına (ana dizinimin dışındaki herhangi bir şey) kendime olabildiğince dokunmaktan kaçınmayı seviyorum.

Tabii ki, "ana dizin" meslektaşlarına bir şeyler koyduğunuzda, diğer kullanıcılar için görünmezler.

~/.profileDebian wheezy için varsayılanda yer alan şey budur :

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi
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.