2009-11-15 11 views
5

Mam projekt hobby, który jest napisany w języku C# przy użyciu MonoDevelop. Od jakiegoś czasu staram się opanować opakowania linuxowe, ale wciąż mam wrażenie, że jestem sfrustrowany i przytłoczony.W jaki sposób mogę spakować moją aplikację linuksową przy użyciu MonoDevelop?

Mój program składa się z:

  • projektu biblioteki ("Generator"), który robi rzeczy z danymi utworzonymi przez mój program.
  • Projekt ui ("Interfejs") używający Gtk #. Ten projekt ma dwa podkatalogi: "polana" (pliki xml, które gtk używa do budowania widżetów) i "książka" (dane używane przez mój program).
  • Projekt użytkowy ("Utils") używany zarówno przez bibliotekę, jak i projekty interfejsów.
  • Główny projekt ("MyProgramName"), który właśnie uruchamia interfejs.

Co (chyba) chcę zrobić, to naprawdę bardzo proste (chyba):

  • kompilacji mojej aplikacji
  • Skopiuj pliki .exe i .dll (do/usr/local/bin?)
  • skopiować "książka" katalogu (/ usr/local/bin?)
  • Skopiuj katalog "polana" (do/usr/local/bin?)

Aha, i chcę to zrobić jako pakiet .deb. Myślę, że jeśli uda mi się uruchomić tarball, pakiet .deb nie powinien być zbyt wielkim problemem, ale to właśnie chcę zrobić w końcu.

Nadal nie jestem pewien, jak to zrobić. Użyłem MonoDevelop do stworzenia tarballa. Kiedy instaluję tarball (używając ./configure, make, sudo checkinstall), wydaje się, że instaluję kod wykonywalny (a nawet tworzę polecenie uruchamiające program), ale zapomina się o katalogach "książka" i "polanie".

Jak miałbym to zrobić? Przepraszam, jeśli jest to pytanie podstawowe/szerokie. Przeszukałem go w tej sprawie i nie mogę znaleźć niczego, co by nie zakładało, że znam podstawy pakowania (nawet jeśli twierdzi, że nie zakłada tego).

Odpowiedz

4

Pakiety Debiana są jak pliki tar - zawierają kopię systemu plików. Aby utworzyć pakiet Debiana ...

  1. Zainstaluj plik tararch w katalogu kompilacji.
  2. Dodaj katalog DEBIAN z plikami kontrolnymi. Uważam, że pomocna jest usługa this article.
  3. Utwórz pakiet pod numerem dpkg --build.

Zacznę od nauki autotoolów GNU: autoconf i automake. Sprawiają, że bardzo łatwo jest zainstalować program w katalogu kompilacji. Wspomniałeś o ./configure. Zakładam więc, że ten projekt ma już pewną strukturę. Z opisu brzmi jak projekt może wymagać ...

  • Wpisy w configure.in plików w „książki” i „Polana”.
  • Makefile.Jestem plikami w "książce" i "polanie".

Poniższe polecenia składają się na plik paczki o nazwie project.deb.

 
# ./configure --prefix build/usr 
# make && make install 
# dpkg --build build project.deb 
3

Być może this blog post może ci w tym pomóc.

To dokładnie opisuje strukturę pakietu deb, który przedstawia się następująco:

<YOUR PACKAGE NAME> 
└── deb 
    ├── DEBIAN 
    │ ├── conffiles 
    │ ├── control 
    │ └── preinst 
    └── opt 
     └── <YOUR APPLICATION> 
      └── <Your Application Contents> 

Zasadniczo masz folder deb wewnątrz opakowania z następującymi 2 obowiązkowych folderów wewnątrz:

  • DEBIAN - zawiera pliki opisujące sam pakiet deb
  • struktura systemu plików odzwierciedlająca miejsce docelowe dla pakietu instalacji. W powyższym przykładzie pakiet zostanie wdrożony w katalogu /opt/<YOUR APPLICATION>.

Z katalogu DEBIAN należy mieć co najmniej plik control, który jest zwykłym tekstem. Musi zawierać wpisy w określonym formacie, który jest szczegółowo opisany na stronie z linkami. Tutaj jest tylko przykładem (zaczerpnięte stamtąd) z przykładowym pliku kontrolnego:

Package:packagingmono 
Version:1.0 
Maintainer:Mikael Chudinov <[email protected]> 
Architecture:amd64 
Section:net 
Description:Template for Debian packaged Mono application. 
Depends:mono-complete (>=3) 
  • Package musi mieć swoją nazwę pakietu. Dozwolone są górne/dolne litery łacińskie, cyfry i -.
  • Version - wersja pakietu. Zalecam użycie wersji montażowej dla tego pola.
  • Maintainer - nazwa (-y) dewelopera pakietów i dane kontaktowe.
  • Architecture - albo i386 lub amd64. Jeśli chcesz dystrybuować swoją aplikację zoptymalizowaną dla x86 i x64 jako osobne pliki wykonywalne na platformę (mam na myśli wbudowane jawnie dla x64 lub x86, nie używając AnyCPU), to powinieneś stworzyć osobne pakiety .deb dla każdego i odpowiednio ustawić pole Architecture. Pozostałe pola mogą nadal być takie same.
  • Section - opcjonalnie, może być jednym z allowed package categories w systemie apt debian.
  • Description. Składa się z dwóch tokenów - krótkiego opisu (pierwszy element przed nowym symbolem linii) i opcjonalnie dłuższego (tekst po pierwszej nowej linii).
  • Depends - lista zależności do pakietu. Przykład stanowi mono-complete który jest nazwą pakietu do wykonywania mono, a ponadto ogranicza ona być wyższa lub równa wersji 3

Ważne jest, aby wiedzieć na temat pakietu deb jest to, że rzeczywiście można umieścić całą aplikację (zawartość folderu bin) do pojedynczej paczki. Nie ma potrzeby umieszczania przywoływanych bibliotek w oddzielnych pakietach i oznaczania ich jako zależności, ma to sens, jeśli planujesz zainstalować inne aplikacje, które będą opierać się na tych samych bibliotekach. Poza tym, pakowanie aplikacji razem nie pozwoliłoby, aby problem związany z dll-piekłem stał się pewnego dnia problemem piekła. Wadą tego jest to, że rozmiar paczki może być większy.

W artykule opisano także niektóre rodzime narzędzia GNU/Linux, które pomogą w tworzeniu pakietu. Na przykład: xbuild może być użyty do uruchomienia pliku MSBuild, który wykona dla Ciebie opakowanie. Pomoże to lepiej poznać programistów Windows. Narzędzie lintian może również pomóc w rozwiązywaniu problemów z utworzonym plikiem .deb. Pozostałe narzędzia to pośrednie narzędzia, które są wywoływane podczas procesu pakowania MSBuild.

+0

@Mogsdad, rzeczywiście, masz rację. Niestety podczas podróży miałem telefon od mojego telefonu, więc miałem ograniczone możliwości wzbogacania postu. Zaktualizowałem go teraz, aby można było usunąć skargę w dół: –

+0

Nie moja awersja; Po prostu wyjaśniałem, dlaczego możesz je zdobyć - ale usunę mój komentarz, dziękuję za podjęcie działań. Powodzenia! (PS: nie musisz czuć się pospieszany, aby odpowiedzieć na 7-letnie pytanie w telefonie ... PO został przeniesiony.) – Mogsdad

+1

Dzięki @Mogsdad, i przepraszam za obwinianie cię bez żadnego dowodu, to jest tak źle, jak w trakcie głosowania lub jeszcze gorzej. Muszę przyznać, że data tego pytania jest jedną z ostatnich rzeczy, które dostrzegam, i od kiedy wczoraj dostałem się do Debiana, zdecydowałem się odpowiedzieć, gdy byłem jeszcze w hype i odpowiednie informacje były dla mnie łatwe do znalezienia. Życzę wszystkim dobrze. –

Powiązane problemy