Difference between revisions of "Wine package guidelines (Italiano)"

From ArchWiki
Jump to: navigation, search
(Cominciata la traduzione - Started the translation)
(The guideline in short: tradotta parzialmente- partially translated)
Line 24: Line 24:
 
Un programma portabile non necessita del proprio filesystem emulato da wine, quindi controllare sul sito [http://www.portablefreeware.com Portable Freeware] se il programma che si vuole pacchettizzare sia portabile.
 
Un programma portabile non necessita del proprio filesystem emulato da wine, quindi controllare sul sito [http://www.portablefreeware.com Portable Freeware] se il programma che si vuole pacchettizzare sia portabile.
  
== The guideline in short ==
+
== Breve guida ==
The idea behind packaging a Windows program is to use the program's files as mere data that wine will interpret, just like JVM and java bytecode.
+
L'idea di base alla pacchettizzazione di un programma per Windows è quella di usare i file del programma come semplici dati che wine interpreterà, proprio come si comportano JVM e java bytecode.
  
So we will install the program in '''/usr/share/"$pkgname"''' and the program will write all what it needs  in '''"$HOME"/."$pkgname"'''. Everything will be prepared by a small script saved in '''/usr/bin/"$pkgname"''' that will create the folder, prepare it if needed, and finally start the program.
+
Quindi il programma sarà installato in {{Filename|/usr/share/"$pkgname"}} ed esso salverà tutto ciò che deve salvare in {{Filename|"$HOME"/."$pkgname"}}. Tutto sarà preparato da un piccolo script salvato in {{Filename|/usr/bin/"$pkgname"}} che creerà la cartella, la preparerà se necessario ed infine avvierà il programma.
  
In the next sections we will talk about every step.
+
Nella prossima sezione saranno discussi tutti i passi.
  
This way every user will have their own settings and their decisions won't bother other users.
+
In questo modo tutti gli utenti avranno le proprie configurazioni e le loro decisioni non influenzeranno gli altri utenti.
  
=== Installing ===
+
=== Installazione ===
If the program has no installer, the installation is a mere decompression of a file; unpack it to '''"$pkgdir"/usr/share/$pkgname''', making sure that the permissions are correct. These commands will do:
+
Se il programma non ha un installer, la sua installazione consiste nell'estrarre l'archivio; decomprimere l'archivio in {{Filename|"$pkgdir"/usr/share/$pkgname}}, assicurarsi che i permessi siano corretti. Questi comandi eseguiranno quanto detto:
 
  find "$pkgdir"/usr/share -type -f -exec chmod 644 "{}" \;
 
  find "$pkgdir"/usr/share -type -f -exec chmod 644 "{}" \;
 
  find "$pkgdir"/usr/share -type -d -exec chmod 755 "{}" \;
 
  find "$pkgdir"/usr/share -type -d -exec chmod 755 "{}" \;
If the program can't be installed the easy way, you need to create a Wine environment:
+
Se il programma non può essere installato secondo il metodo più semplice, allora sarà necessario creare un ambiente Wine:
 
  install -m755 -d "$srcdir"/tmp "$srcdir"/tmp/env "$srcdir"/tmp/local
 
  install -m755 -d "$srcdir"/tmp "$srcdir"/tmp/env "$srcdir"/tmp/local
 
  export WINEPREFIX="$srcdir"/tmp/env
 
  export WINEPREFIX="$srcdir"/tmp/env
 
  export XDG_DATA_HOME="$srcdir"/tmp/local
 
  export XDG_DATA_HOME="$srcdir"/tmp/local
  wine "$srcdir"/installer.exe /silentoptions
+
  wine "$srcdir"/installer.exe /opzionisilent
We have not discussed portability yet, but if your program does not need the registry keys it modified, you can just copy the directory from the:
+
Ancora non è stata discussa definizione di portabilità, ma se il programma non necessita di modificare il registro di sistema, sarà possibile copiare la cartella da:
 
  "$srcdir"/tmp/env/drive_c/Program\ Files/programname
 
  "$srcdir"/tmp/env/drive_c/Program\ Files/programname
Otherwise you need to copy all the registry files too and eventually the files the program installed around. The '''"$srcdir"/tmp/local''' will contains menu icons and desktop files, you may want to copy them in the package. If there does not exist a way to install the program silently... Maybe you can make a '''.tar.gz''' file and upload it somewhere? If nothing automated is possible, force the user to follow the installer and hope he does not mess up the installation, write some checks before blindly copying a folder that may not exist (e.g., the user pressed 'Cancel'.)
 
  
=== The /usr/bin script ===
+
Altrimenti sarà necessario copiare tutti i file del registro ed eventualmente gli altri file. {{Filename|"$srcdir"/tmp/local}} conterrà i menù, le icone ed i desktop file, se saranno necessari posso essere inseriti nel pacchetto. Se non esiste un modo di esegurie l'installazione da linea di comando(modalità silent). Può essere creato un archivio '''.tar.gz''' e caricato su qualche servizio di hosting? Se non è possibile automatizzare l'installazione, forzare l'utente a seguire l'installer, e sperare che non vengano effettuati errori, è consigliato quindi utilizzare alcuni controlli prima di copiare una cartella alla cieca,che magari non esiste(es. l'utente ha premuto 'Cancel'.).
This script prepares the settings folder and starts the program. If your program is portable, it will look like this:
+
 
 +
=== Lo script in {{Filename|/usr/bin}} ===
 +
Questo script preparerà le cartelle di configurazione ed avvierà il programma. Se il programma è portabile, sarà simile a questo:
 
  #!/bin/bash
 
  #!/bin/bash
 
  unset WINEPREFIX
 
  unset WINEPREFIX
  if [ ! -d "$HOME"/.programname ] ; then
+
  if [ ! -d "$HOME"/.nomeprogramma ] ; then
     mkdir -p "$HOME"/.programname
+
     mkdir -p "$HOME"/.nomeprogramma
     #prepare the environment here
+
     #preparare l'ambiente quì
 
  fi
 
  fi
  WINEDEBUG=-all wine "$HOME"/.programname/programname "$@"
+
  WINEDEBUG=-all wine "$HOME"/.nomeprogramma/nomeprogramma "$@"
If it is clean, it will look like this:
+
Se è pulito, invece sarà simile a questo:
 
  #!/bin/bash
 
  #!/bin/bash
  export WINEPREFIX="$HOME"/.programname/wine
+
  export WINEPREFIX="$HOME"/.nomeprogramma/wine
  if [ ! -d "$HOME"/.programname ] ; then
+
  if [ ! -d "$HOME"/.nomeprogramma ] ; then
     mkdir -p "$HOME"/.programname/wine
+
     mkdir -p "$HOME"/.nomeprogramma/wine
 
     wineboot -u
 
     wineboot -u
     #copy the registry file if needed
+
     #copiare i file di registro se necessario
 
  fi
 
  fi
  WINEDEBUG=-all wine /usr/share/programname "$@"
+
  WINEDEBUG=-all wine /usr/share/nomeprogramma "$@"
As you can see, in the second case there is no environment preparation. In fact a clean application will be started directly from '''/usr/share''' since it won't need to write in its folder, so its settings will be wrote somewhere in the emulated filesystem.
+
Come si può vedere, nel secondo caso, non viene preparato nessun ambiente. Infatti un programma pulito sarà avviato direttamente da {{Filename|/usr/share}} dato che non ha bisogno di scrivere nella sua cartella di installazione, quindi le sue impostazioni saranno salvate all'interno del filesystem emulato.
  
If the application is neither clean neither portable the two ideas must be combined.
+
Se l'applicazione non è ne pulita ne portabile, le due idee devono essere combinate.
  
 
If the application does not write settings at all, skip the '''if''' and start it from '''/usr/share'''.
 
If the application does not write settings at all, skip the '''if''' and start it from '''/usr/share'''.

Revision as of 19:11, 22 March 2011


This template has only maintenance purposes. For linking to local translations please use interlanguage links, see Help:i18n#Interlanguage links.


Local languages: Català – Dansk – English – Español – Esperanto – Hrvatski – Indonesia – Italiano – Lietuviškai – Magyar – Nederlands – Norsk Bokmål – Polski – Português – Slovenský – Česky – Ελληνικά – Български – Русский – Српски – Українська – עברית – العربية – ไทย – 日本語 – 正體中文 – 简体中文 – 한국어


External languages (all articles in these languages should be moved to the external wiki): Deutsch – Français – Română – Suomi – Svenska – Tiếng Việt – Türkçe – فارسی

Tango-preferences-desktop-locale.pngThis article or section needs to be translated.Tango-preferences-desktop-locale.png

Notes: please use the first argument of the template to provide more detailed indications. (Discuss in Talk:Wine package guidelines (Italiano)#)
Nota: Questo articolo è in fase di traduzione. Seguite per ora le istruzioni della versione inglese.

Molti programmi per Windows possono essere utili anche su Linux, è quindi possibile che esista un apposito pacchetto per questi programmi. La differenza tra i due sistemi operativi rende questo compito un po’ complesso. In questa guida parleremo degli eseguibili Win32, dato che i progetti i cui codici sorgente sono disponibili saranno già compilati per Linux.

Cose da controllare attentamente

  • La licenza, la licenza permette la pacchettizazione del programma?
  • L'installer, è possibile effettuare l'installazione da linea di comando(silent installation)? O meglio, esiste una versione senza installer?
  • Portabilità e pulizia, il programma è portabile? il programma è pulito?

Si definisce portabile un programma che non scrive mai all'interno del registro di sistema o fuori dalla sua cartella di installazione; si definisce pulito se esso non scrive mai all'interno della sua cartella di installazione, ma può salvare le proprie impostazioni all'interno della cartella dell'utente. Un programma può essere entrambi (es. non salva impostazioni) o nessuno dei due(es. salva nella cartella di installazione, salva in altre destinazioni, e modifica il registro...).

Licenza

Solitamente le licenze sono contenute in file di testo all'interno della cartella di installazione. Se non si riesce a trovarla, provare ad cercarla nelle finestre di dialogo durante l'installazione. Se non viene impedita la pacchettizzazione sarà possibile proseguire. All'autore non interessa. Altrimenti la licenza può non consentire di rimuovere file o di pacchettizzare il software. Nel primo caso sarà necessario fare attenzione che durante il processo di makepkg non venga perso nessun file, sara possibile rimuovere file non necessari(es. gli unistaller) nella fase di Template:Codeline; nell'altro caso tutti i processi di installazione dovranno essere eseguiti nella fase di Template:Codeline. La fase di Template:Codeline si occuperà solo di copiare i file di installazione.

Installer

Risulta molto più semplice utilizzare archivi compressi come .zip piuttosto che l'installer grafico di Windows. Se non si ha scelta, dato che l'autore del programma lo distribuisce solo nella versione con l'installer, cercare documentazione alla ricerca di una installazione da linea di comando(silently oppure silent installation). Il sito MSFN solitamente è un buon posto dove cercare queste informazioni. Se non si trova un modo, provare estraendo l'installer con Template:Package Official, Template:Package Official oppure altri software di estrazione; a volte funziona.

Portabilità e pulizia

Un programma portabile non necessita del proprio filesystem emulato da wine, quindi controllare sul sito Portable Freeware se il programma che si vuole pacchettizzare sia portabile.

Breve guida

L'idea di base alla pacchettizzazione di un programma per Windows è quella di usare i file del programma come semplici dati che wine interpreterà, proprio come si comportano JVM e java bytecode.

Quindi il programma sarà installato in Template:Filename ed esso salverà tutto ciò che deve salvare in Template:Filename. Tutto sarà preparato da un piccolo script salvato in Template:Filename che creerà la cartella, la preparerà se necessario ed infine avvierà il programma.

Nella prossima sezione saranno discussi tutti i passi.

In questo modo tutti gli utenti avranno le proprie configurazioni e le loro decisioni non influenzeranno gli altri utenti.

Installazione

Se il programma non ha un installer, la sua installazione consiste nell'estrarre l'archivio; decomprimere l'archivio in Template:Filename, assicurarsi che i permessi siano corretti. Questi comandi eseguiranno quanto detto:

find "$pkgdir"/usr/share -type -f -exec chmod 644 "{}" \;
find "$pkgdir"/usr/share -type -d -exec chmod 755 "{}" \;

Se il programma non può essere installato secondo il metodo più semplice, allora sarà necessario creare un ambiente Wine:

install -m755 -d "$srcdir"/tmp "$srcdir"/tmp/env "$srcdir"/tmp/local
export WINEPREFIX="$srcdir"/tmp/env
export XDG_DATA_HOME="$srcdir"/tmp/local
wine "$srcdir"/installer.exe /opzionisilent

Ancora non è stata discussa definizione di portabilità, ma se il programma non necessita di modificare il registro di sistema, sarà possibile copiare la cartella da:

"$srcdir"/tmp/env/drive_c/Program\ Files/programname

Altrimenti sarà necessario copiare tutti i file del registro ed eventualmente gli altri file. Template:Filename conterrà i menù, le icone ed i desktop file, se saranno necessari posso essere inseriti nel pacchetto. Se non esiste un modo di esegurie l'installazione da linea di comando(modalità silent). Può essere creato un archivio .tar.gz e caricato su qualche servizio di hosting? Se non è possibile automatizzare l'installazione, forzare l'utente a seguire l'installer, e sperare che non vengano effettuati errori, è consigliato quindi utilizzare alcuni controlli prima di copiare una cartella alla cieca,che magari non esiste(es. l'utente ha premuto 'Cancel'.).

Lo script in Template:Filename

Questo script preparerà le cartelle di configurazione ed avvierà il programma. Se il programma è portabile, sarà simile a questo:

#!/bin/bash
unset WINEPREFIX
if [ ! -d "$HOME"/.nomeprogramma ] ; then
   mkdir -p "$HOME"/.nomeprogramma
   #preparare l'ambiente quì
fi
WINEDEBUG=-all wine "$HOME"/.nomeprogramma/nomeprogramma "$@"

Se è pulito, invece sarà simile a questo:

#!/bin/bash
export WINEPREFIX="$HOME"/.nomeprogramma/wine
if [ ! -d "$HOME"/.nomeprogramma ] ; then
   mkdir -p "$HOME"/.nomeprogramma/wine
   wineboot -u
   #copiare i file di registro se necessario
fi
WINEDEBUG=-all wine /usr/share/nomeprogramma "$@"

Come si può vedere, nel secondo caso, non viene preparato nessun ambiente. Infatti un programma pulito sarà avviato direttamente da Template:Filename dato che non ha bisogno di scrivere nella sua cartella di installazione, quindi le sue impostazioni saranno salvate all'interno del filesystem emulato.

Se l'applicazione non è ne pulita ne portabile, le due idee devono essere combinate.

If the application does not write settings at all, skip the if and start it from /usr/share.

The task of preparing the environment may differ greatly between applications, but follow these rules of thumb:

  • if the program...
    • ...just needs to read a file, symlink it.
    • ...needs to write in a file, copy it.
    • ...does not use a file, ignore it.

Of course the minimum is just starting WINEDEBUG=-all wine /usr/share/programname "$@".

Usually the environment will be made by symlinking between the "$HOME"/.programname directory and the /usr/share/programname files. But since some Windows programs are very fickle about their paths, you may need to symlink directly in the "$HOME"/.programname/wine/drive_c/Program\ Files/programname directory.

Of course those are just ideas to integrate Win32 applications in the Linux environment, do not forget your intelligence and gumption.

As example, utorrent is by default a clean application, but with a easy step can be used as a portable one. Since it is a single file and it is pretty small creating its wine environment (about 5MB) it is probably an overkill. It is better to symlink the executable, create the empty settings.dat in order to use it portable in the $HOME/.utorrent directory. With the added advantage that just visiting .utorrent folder an user can see a copy of the .torrent files she downloaded.

One example

We will make a package for eMule. According to Portable Freeware, eMule is not completely portable since it writes some (useless) keys in the registry.

On the other hand, it is not clean either since it writes its configuration files and puts its downloads in its installation folder.

Luckily there is an installer-less version available.

So we make our PKGBUILD; the only dependency is wine for i686 machines or bin32-wine for x86_64 machines. The md5sums should be added.

# Contributor: You <youremail>
pkgname=emule
pkgver=0.49b
pkgrel=1
pkgdesc="One of the biggest and most reliable peer-to-peer file sharing
clients around the world."
arch=(i686 x86_64)
url="http://www.emule-project.net"
license=('GPL')
depends=()
[ "$CARCH" = i686   ] && depends=(wine)
[ "$CARCH" = x86_64 ] && depends=(bin32-wine)
makedepends=(unzip)
source=(emule http://prdownloads.sourceforge.net/emule/eMule$pkgver.zip)
noextract=()
options=(!strip)

build() {
  cd "$startdir"
  rm -f src/eMule"$pkgver"/license* #It is GPL

  install -d -m755 pkg/usr/share/emule
  cp -ra src/eMule"$pkgver"/* pkg/usr/share/emule
  find pkg/usr/share/emule -type d -exec chmod 755 "{}" \;
  find pkg/usr/share/emule -type f -exec chmod 644 "{}" \;

  install -d -m755 pkg/usr/bin
  install -m755 emule pkg/usr/bin 
  }

Now we make our emule file, which according to build(), will be copied and made executable in /usr/bin.

#!/bin/bash
export WINEPREFIX="$HOME/.emule/wine"

if [ ! -d "$HOME"/.emule ] ; then
  mkdir -p "$HOME"/.emule/wine || exit 1
  wineprefixcreate || exit 1
  #Each user will have its config, we copy the default file since emule
  #needs to write here.
  cp -r /usr/share/emule/config "$HOME"/.emule || exit 1
  #We symlink the files emule needs to read to work
  ln -s /usr/share/emule/emule.exe "$HOME"/.emule/emule || exit 1
  ln -s -T /usr/share/emule/lang "$HOME"/.emule/lang || exit 1
  ln -s -T /usr/share/emule/webserver "$HOME"/.emule/webserver || exit 1
fi

wine "$HOME"/.emule/emule "$@"

If you want to be more precise, you may add a message in the .install file telling the user that they should disable search history since wine messes up that menu. You may even provide a default config file with the best settings. And that's it... makepkg, check the pkg folder to be sure, and install.

Gecko

Gecko is a html engine used by Wine to render html for programs which normally use Explorer. Only few programs actually need this feature, but Wine will always ask to install Gecko if you did not. To disable the dialogue you can: install Gecko, use a dlloverride.

The easiest way to install Gecko is using winetricks (from the package of the same name):

$ wineboot -u #(Click cancel when asked)
$ winetricks -q gecko

To disable html rendering and the dialogue you need to use a dlloverride in your script.

export WINEDLLOVERRIDES="mshtml="

you can also disable via winecfg: just set mshtml to Disable.