Repository 32bit  Forum
Repository 64bit  Wiki

Slackyd - Slacky downloader [DEAD]

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

Re: Slacky Downloader :)

Messaggioda Dani » mar feb 19, 2008 6:31

Fatto :)
Dani
Linux 3.x
Linux 3.x
 
Messaggi: 1447
Iscritto il: mer apr 26, 2006 0:52
Desktop: gnome
Distribuzione: arch

Re: Slacky Downloader :)

Messaggioda michelino » mar feb 19, 2008 16:05

Te l'ho detto che mi leggi nel pensiero
Avatar utente
michelino
Staff
Staff
 
Messaggi: 865
Iscritto il: gio dic 21, 2006 11:59
Località: Foggia
Nome Cognome: Michelino Chionchio
Slackware: -current
Kernel: 2.6.29.6
Desktop: kde (current)

Re: Slacky Downloader :)

Messaggioda michelino » mar feb 19, 2008 19:36

Sempre IMVHO:
1) credo sia meglio che il "purge" sia fatto solo per i tgz, non anche per CHECKSUMS.md5 e PACKAGES.TXT, altrimenti costringi a ri-updatarli anche quando vuoi solo tenere pulita casa;
2) forse è il caso che quando dai "slackyd -u", questonon sovrascriva direttamente CHECKSUMS.md5 e PACKAGES.TXT, ma li sovrascriva solo dopo che il download è andato a buon fine
Avatar utente
michelino
Staff
Staff
 
Messaggi: 865
Iscritto il: gio dic 21, 2006 11:59
Località: Foggia
Nome Cognome: Michelino Chionchio
Slackware: -current
Kernel: 2.6.29.6
Desktop: kde (current)

Re: Slacky Downloader :)

Messaggioda Dani » mar feb 19, 2008 22:44

Ok, ti posto la patch senza rilasciare una nuova versione...

Codice: Seleziona tutto
diff -Naur src/func.c ../slackyd-0.0.6.1beta/src/func.c
--- src/func.c   2008-02-19 06:27:57.000000000 +0100
+++ ../slackyd-0.0.6.1beta/src/func.c   2008-02-19 22:28:26.000000000 +0100
@@ -93,7 +93,7 @@
 }
 
 /* save contenent of file fd, big size bytes, in data */
-void load_file (char** data, FILE* fd, size_t size)
+bool load_file (char** data, FILE* fd, size_t size)
 {
    int i = 0;
    
@@ -105,20 +105,47 @@
       (*data)[i++] = (char) fgetc (fd);
    }
    
-   return ;
+   return false;
 }
 
-/* kill a child */
-void kill_child (pid_t pid)
+/* copy a file from src path to dest path (if dest exist will be overwrite).
+ * If del is true, src file will be deleted.
+ */
+bool copy_file_t (const char* src, const char* dest, bool del)
+{
+   FILE* fd_src  = fopen (src,  "r");
+   FILE* fd_dest = fopen (dest, "w");
+   
+   if (!fd_src || !fd_dest) return true;
+   
+   rewind (fd_src);
+   while (!feof (fd_src))
+   {
+      fputc (fgetc (fd_src), fd_dest);
+   }
+   
+   if (del) remove (src);
+   
+   return false;
+}
+
+/* If str is non null, print it. After kill child whit pid 'pid'. */
+void kill_child (const char* str, pid_t pid)
 {
    int status;
    
+   if (str)
+   {
+      fprintf (stdout, str);
+       fflush (stdout);
+   }
+   
    kill (pid, SIGTERM);
    status = waitpid (pid, NULL, WNOHANG);
    if (status == pid) /* child terminated */
     return;
    
-   kill (pid, SIGINT); /* child alive. Send SIGINT */
+   kill (pid, SIGINT); /* child alive. Send SIGINT. */
    waitpid (pid, NULL, WNOHANG);
    
    return;
diff -Naur src/net.c ../slackyd-0.0.6.1beta/src/net.c
--- src/net.c   2008-02-19 04:48:38.000000000 +0100
+++ ../slackyd-0.0.6.1beta/src/net.c   2008-02-19 22:25:54.000000000 +0100
@@ -86,23 +86,30 @@
  */
 u_long get_pkg_list (int sd, repos* repos_data, const char* filename)
 {
-   char buffer[BUFFSIZE + 1] = { 0 };
+   char path     [BUFFSIZE + 1] = { 0 },
+       tmp_path [BUFFSIZE + 1] = { 0 },
+       buffer   [BUFFSIZE + 1] = { 0 };
    int rval;
    u_long rec_size = 0;
    FILE* fd;
    pid_t pid_effect;
    
-   /* where save packages list */
-   snprintf (buffer, BUFFSIZE, "%s/%s", DATADIR, filename);
-   fd = fopen_or_die (buffer, "w");
+   /* file path */
+   snprintf (path, BUFFSIZE, "%s/%s", DATADIR, filename);
+   /* temporarey file path */
+   snprintf (tmp_path, BUFFSIZE, "%s/%s.tmp", DATADIR, filename);
+   fd = fopen_or_die (tmp_path, "w");
    
    snprintf (buffer, BUFFSIZE, TEMPLATE_GET_PKG_LIST,
            repos_data->path,
            filename,
            repos_data->a_ip);
    /* send request */       
-   if ((send (sd, buffer, strlen (buffer), 0)) < 0)   
-    _error (3, "\nCannot send request to", repos_data->hostname, ".\n\n");
+   if ((send (sd, buffer, strlen (buffer), 0)) < 0)
+   {
+      remove (path);
+      _error (3, "\nCannot send request to", repos_data->hostname, ".\n\n");
+   }
    
    /* ignore http data, receive and save other ... */
    pid_effect = stupid_effect ('+', 10,  2, NULL);
@@ -116,9 +123,14 @@
       rec_size += rval;
    }
    
-   kill_child (pid_effect);
-   fprintf (stdout, "\r[++++++++++]");
+   if (copy_file_t (tmp_path, path, true))
+   {
+      kill_child ("\r[++++++++++]", pid_effect);
+       _error (5, "\n\nUnexpected error while copying file \"", tmp_path, "\" to \"", path, "\".\n\n");
+   }
    
+   kill_child ("\r[++++++++++]", pid_effect);
+      
    fclose (fd);
    close (sd);
    return rec_size;
@@ -127,8 +139,8 @@
 int get_pkg (repos* repos_data, pkg_info_ptr package)
 {
    int rval, sd;
-   char buffer[BUFFSIZE + 1] = { 0 };
-   char path[BUFFSIZE + 1] = { 0 };
+   char buffer[BUFFSIZE + 1] = { 0 },
+        path[BUFFSIZE + 1] = { 0 };
    FILE* fd;
    pid_t pid_effect;
    
@@ -169,9 +181,7 @@
       fwrite (buffer, 1, rval, fd);
    }
    
-   kill_child (pid_effect);
-   fprintf (stdout, "\r[++++++++++]");
-    fflush (stdout);
+   kill_child ("\r[++++++++++]", pid_effect);
    
    fclose (fd);
    close (sd);
diff -Naur src/packages.c ../slackyd-0.0.6.1beta/src/packages.c
--- src/packages.c   2008-02-19 06:07:35.000000000 +0100
+++ ../slackyd-0.0.6.1beta/src/packages.c   2008-02-19 20:18:41.000000000 +0100
@@ -723,7 +723,7 @@
 {
    struct dirent** namelist;
    char path[BUFFSIZE + 1] = { 0 };
-   int i = 0, n, rval;
+   int i = 0, n, rval, l;
    
    n = scandir (DATADIR, &namelist, 0, alphasort);
    if (n < 0)
@@ -741,18 +741,22 @@
    
    while (i < n)
    {
-      snprintf (path, BUFFSIZE, "%s/%s", DATADIR, namelist[i]->d_name);
-      fprintf (stdout, "Deleting %s...", namelist[i]->d_name);
-       fflush (stdout);
-      rval = remove (path);
-      if (!rval)
-       fprintf (stdout, "Done.\n");
-      else
-       perror ("Failed");
-                
-      free (namelist[i]);
-       i++;
+      l = strlen (namelist[i]->d_name);
+      if (!strncmp (namelist[i]->d_name + l - 4, ".tgz", 4))
+      {
+         snprintf (path, BUFFSIZE, "%s/%s", DATADIR, namelist[i]->d_name);
+         fprintf (stdout, "Deleting %s...", namelist[i]->d_name);
+           fflush (stdout);
+         rval = remove (path);
+         if (!rval)
+           fprintf (stdout, "Done.\n");
+         else
+          perror ("Failed");
+       }      
+         free (namelist[i]);
+          i++;
    }
-   
+   free (namelist[i]);
+   namelist[i] = NULL;
    return false;
 }
diff -Naur src/slackyd.h ../slackyd-0.0.6.1beta/src/slackyd.h
--- src/slackyd.h   2008-02-19 06:01:16.000000000 +0100
+++ ../slackyd-0.0.6.1beta/src/slackyd.h   2008-02-19 22:25:10.000000000 +0100
@@ -171,8 +171,9 @@
 void    verify_alloc  (void* mem);
 FILE*   fopen_or_die  (const char* file_name, const char* mode);
 size_t  get_file_size (FILE* fd);
-void    load_file     (char** data, FILE* fd, size_t size);
-void    kill_child    (pid_t pid);
+bool    load_file     (char** data, FILE* fd, size_t size);
+bool    copy_file_t (const char* src, const char* dest, bool remove);
+void    kill_child    (const char* s, pid_t pid);
 char*   _getline      (FILE* fd, unsigned n_line);
 char*   _getstrline   (char* str);
 pid_t   stupid_effect (char c, u_short element, u_short time_sleep, const char* s);


Fammi sapere se va bene :)
Dani
Linux 3.x
Linux 3.x
 
Messaggi: 1447
Iscritto il: mer apr 26, 2006 0:52
Desktop: gnome
Distribuzione: arch

Re: Slacky Downloader :)

Messaggioda Dani » mer feb 20, 2008 13:01

lol che pirla, avevo dimenticato di chiudere il file temporaneo prima di copiarlo e di conseguenza alcuni bytes restavano bufferizzati, ottenendo quindi dei file con pezzi mancanti :oops:
Poco male, ecco la nuova patch che comprende anche la verifica di eventuali conflitti sui pacchetti scaricati, stampando un warning se necessario.
Spero di non aver fatto altre papere stavolta :oops:

Patch
Dani
Linux 3.x
Linux 3.x
 
Messaggi: 1447
Iscritto il: mer apr 26, 2006 0:52
Desktop: gnome
Distribuzione: arch

Re: Slacky Downloader :)

Messaggioda michelino » mer feb 20, 2008 13:54

Infatti non patchava :!: :!: :!:
Poiché non avevo molto tempo ho rinviato l'analisi del perché...meno male che hai provveduto prima che impazzissi :D :D :D .
Ora patch e compila
Due feedback:
1) Lo switch -C ora funziona come detto
2) Forse non mi sono spiegato per il download, io intendevo questo meccanismo
    download CHECKSUMS.md5.tmp FILELIST.TXT.tmp PACKAGES.TXT.tmp
    e dopo
    mv CHECKSUMS.md5.tmp CHECKSUMS.md5
    mv FILELIST.TXT.tmp FILELIST.TXT
    mv PACKAGES.TXT.tmp PACKAGES.TXT
Non mi sembra che la versione patchata funzioni così
Avatar utente
michelino
Staff
Staff
 
Messaggi: 865
Iscritto il: gio dic 21, 2006 11:59
Località: Foggia
Nome Cognome: Michelino Chionchio
Slackware: -current
Kernel: 2.6.29.6
Desktop: kde (current)

Re: Slacky Downloader :)

Messaggioda Dani » mer feb 20, 2008 14:51

michelino ha scritto:1) Lo switch -C ora funziona come detto

Bene :P

2) Forse non mi sono spiegato per il download, io intendevo questo meccanismo
    download CHECKSUMS.md5.tmp FILELIST.TXT.tmp PACKAGES.TXT.tmp
    e dopo
    mv CHECKSUMS.md5.tmp CHECKSUMS.md5
    mv FILELIST.TXT.tmp FILELIST.TXT
    mv PACKAGES.TXT.tmp PACKAGES.TXT
Non mi sembra che la versione patchata funzioni così


Non funziona proprio così, ma in maniera simile:
-> download file.txt.tmp
-> in caso di errore avviso e rimozione file.txt.tmp
-> in caso di successo creazione file.txt se non esiste, altrimenti se esiste ne viene cancellato il contenuto
-> lettura file.txt.tmp -> scrittura file.txt
-> rimozione file.txt.tmp
-> download prossimo file
...

Se fai un ls -l /var/slackyd durante l'update dovresti vedere questa situazione :roll:
Dani
Linux 3.x
Linux 3.x
 
Messaggi: 1447
Iscritto il: mer apr 26, 2006 0:52
Desktop: gnome
Distribuzione: arch

Re: Slacky Downloader :)

Messaggioda michelino » mer feb 20, 2008 16:35

1) Con il nuovo metodo mi fa differenza se l'update lo do come root o come utente normale, mi spiego: prima updatavo indifferentemente come root o cume user, e non mi dava probleami, dopo l'applicazione della patch se updato come root, il riupdate come user mi da l'errore
Codice: Seleziona tutto
Unexpected error while copying file "/var/slackyd/FILELIST.TXT.tmp" to "/var/slackyd/FILELIST.TXT".

hai in qualche modo cambiato la maschera dei permessi o sono io che ricordo male?

2) non sarebbe meglio prima scaricare tutti e tre i file e poi sostituire i vecchi, poichè in caso di interruzione così si avrebbe una situazione non aggiornata ma pur sempre congruente dei file, nel caso odierno, invece, il FILELIST.TXT nuovo potrebbe non essere congruente con gli altri due se l'interruzione avviene subito dopo l'aggiornamento del primo:

3) non è il caso di mantenere la data e l'ora di creazione dei file come risulta dal repository, così con un semplice controllo dei timestamps si può evitare di scaricare gli stessi identici file, magari con un opzione analoga a quella di slackpkg che in caso di identità chiede
Codice: Seleziona tutto
 No changes in ChangeLog.txt between your last update and now.
                Do you really want to download all other files (y/N)?


Tutto questo sempre IMVVVHO, perché il tool e fantastico e lo uso costantemente
Avatar utente
michelino
Staff
Staff
 
Messaggi: 865
Iscritto il: gio dic 21, 2006 11:59
Località: Foggia
Nome Cognome: Michelino Chionchio
Slackware: -current
Kernel: 2.6.29.6
Desktop: kde (current)

Re: Slacky Downloader :)

Messaggioda Dani » mer feb 20, 2008 18:41

michelino ha scritto:1) Con il nuovo metodo mi fa differenza se l'update lo do come root o come utente normale, mi spiego: prima updatavo indifferentemente come root o cume user, e non mi dava probleami, dopo l'applicazione della patch se updato come root, il riupdate come user mi da l'errore
Codice: Seleziona tutto
Unexpected error while copying file "/var/slackyd/FILELIST.TXT.tmp" to "/var/slackyd/FILELIST.TXT".

hai in qualche modo cambiato la maschera dei permessi o sono io che ricordo male?

Su questa cosa non ho una spiegazione :?
considerando che la directory è chmoddata 777 e i file di root 644, non posso sovrascrivere il file aprendolo in scrittura ma posso sovrascriverlo rinominandolo :?:
Misteri dei permessi unix. Corretto comunque :)

2) non sarebbe meglio prima scaricare tutti e tre i file e poi sostituire i vecchi, poichè in caso di interruzione così si avrebbe una situazione non aggiornata ma pur sempre congruente dei file, nel caso odierno, invece, il FILELIST.TXT nuovo potrebbe non essere congruente con gli altri due se l'interruzione avviene subito dopo l'aggiornamento del primo:

Giusto. Corretto :)

3) non è il caso di mantenere la data e l'ora di creazione dei file come risulta dal repository, così con un semplice controllo dei timestamps si può evitare di scaricare gli stessi identici file, magari con un opzione analoga a quella di slackpkg che in caso di identità chiede
Codice: Seleziona tutto
 No changes in ChangeLog.txt between your last update and now.
                Do you really want to download all other files (y/N)?


Tutto questo sempre IMVVVHO, perché il tool e fantastico e lo uso costantemente


A questo ci devo ancora lavorare :oops:

Ecco la patch da applicare all'ultima versione stabile: patch

Grazie per la collaborazione ;)
Dani
Linux 3.x
Linux 3.x
 
Messaggi: 1447
Iscritto il: mer apr 26, 2006 0:52
Desktop: gnome
Distribuzione: arch

Re: Slacky Downloader :)

Messaggioda michelino » gio feb 21, 2008 1:54

Ho patchato, pacchettizzato e passato a Loris slackyd-0.0.6.3beta.
Funge come da modifiche.
Ripeto: grande tool!
Non mi ringraziare per la collaborazione, semplice egoismo :D :D :D
Avatar utente
michelino
Staff
Staff
 
Messaggi: 865
Iscritto il: gio dic 21, 2006 11:59
Località: Foggia
Nome Cognome: Michelino Chionchio
Slackware: -current
Kernel: 2.6.29.6
Desktop: kde (current)

Re: Slacky Downloader :)

Messaggioda Dani » mar feb 26, 2008 3:18

Rilasciata la 0.0.7 :P
Chiunque abbia altri suggerimenti o feedback da dare si faccia avanti :)
Dani
Linux 3.x
Linux 3.x
 
Messaggi: 1447
Iscritto il: mer apr 26, 2006 0:52
Desktop: gnome
Distribuzione: arch

Re: Slacky Downloader :)

Messaggioda michelino » mer feb 27, 2008 12:47

Dani è normale questo?
Codice: Seleziona tutto
$ slackyd -s xrope

+-----------------------------+
|      Slacky Downloader      |
|                             |
|       Written by Dani       |
|      <dani@slacky.it>       |
+-----------------------------+

Searching xrope...

Packages xrope not found.

Error code: Success  <------- Qui!!
Avatar utente
michelino
Staff
Staff
 
Messaggi: 865
Iscritto il: gio dic 21, 2006 11:59
Località: Foggia
Nome Cognome: Michelino Chionchio
Slackware: -current
Kernel: 2.6.29.6
Desktop: kde (current)

Re: Slacky Downloader :)

Messaggioda Dani » mer feb 27, 2008 15:03

Meglio levarlo via x-)

Codice: Seleziona tutto
diff -Naur slackyd-0.0.7beta/src/func.c slackyd-0.0.7.1beta/src/func.c
--- slackyd-0.0.7beta/src/func.c   2008-02-26 01:12:41.000000000 +0100
+++ slackyd-0.0.7.1beta/src/func.c   2008-02-27 14:55:03.000000000 +0100
@@ -38,7 +38,6 @@
    }
    va_end (ap);
    
-   perror ("Error code");
    exit (1);
 }
 
diff -Naur slackyd-0.0.7beta/src/slackyd.h slackyd-0.0.7.1beta/src/slackyd.h
--- slackyd-0.0.7beta/src/slackyd.h   2008-02-26 02:53:57.000000000 +0100
+++ slackyd-0.0.7.1beta/src/slackyd.h   2008-02-27 14:54:53.000000000 +0100
@@ -19,7 +19,7 @@
  *      MA 02110-1301, USA.
  */
 #define _GNU_SOURCE
-#define SLACKYD_VERSION "0.0.7 beta"
+#define SLACKYD_VERSION "0.0.7.1 beta"
 
 #include <stdio.h>
 #include <stdlib.h>


Da applicare all'ultima versione rilasciata chiaramente e usando patch -p1 !
Dani
Linux 3.x
Linux 3.x
 
Messaggi: 1447
Iscritto il: mer apr 26, 2006 0:52
Desktop: gnome
Distribuzione: arch

Re: Slacky Downloader :)

Messaggioda michelino » mer feb 27, 2008 15:47

Non patcha !
Avatar utente
michelino
Staff
Staff
 
Messaggi: 865
Iscritto il: gio dic 21, 2006 11:59
Località: Foggia
Nome Cognome: Michelino Chionchio
Slackware: -current
Kernel: 2.6.29.6
Desktop: kde (current)

Re: Slacky Downloader :)

Messaggioda Dani » gio feb 28, 2008 4:47

Come no !? Da me va !

Codice: Seleziona tutto
dani[slackyd]$ tar xf slackyd-0.0.7beta.tar
dani[slackyd]$ cd slackyd-0.0.7beta
dani[slackyd-0.0.7beta]$ patch -p1 < ../patches/slackyd-0.0.7.1.diff
patching file src/func.c
patching file src/slackyd.h
dani[slackyd-0.0.7beta]$


:-k
Dani
Linux 3.x
Linux 3.x
 
Messaggi: 1447
Iscritto il: mer apr 26, 2006 0:52
Desktop: gnome
Distribuzione: arch

PrecedenteProssimo

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti

cron