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.
Dani
Linux 4.x
Linux 4.x
Messaggi: 1447
Iscritto il: mer 26 apr 2006, 1:52
Desktop: gnome
Distribuzione: arch

Re: Slacky Downloader :)

Messaggio da Dani »

Fatto :)

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

Re: Slacky Downloader :)

Messaggio da michelino »

Te l'ho detto che mi leggi nel pensiero

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

Re: Slacky Downloader :)

Messaggio da michelino »

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

Dani
Linux 4.x
Linux 4.x
Messaggi: 1447
Iscritto il: mer 26 apr 2006, 1:52
Desktop: gnome
Distribuzione: arch

Re: Slacky Downloader :)

Messaggio da Dani »

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 4.x
Linux 4.x
Messaggi: 1447
Iscritto il: mer 26 apr 2006, 1:52
Desktop: gnome
Distribuzione: arch

Re: Slacky Downloader :)

Messaggio da Dani »

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

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

Re: Slacky Downloader :)

Messaggio da michelino »

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ì

Dani
Linux 4.x
Linux 4.x
Messaggi: 1447
Iscritto il: mer 26 apr 2006, 1:52
Desktop: gnome
Distribuzione: arch

Re: Slacky Downloader :)

Messaggio da Dani »

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:

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

Re: Slacky Downloader :)

Messaggio da michelino »

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

Dani
Linux 4.x
Linux 4.x
Messaggi: 1447
Iscritto il: mer 26 apr 2006, 1:52
Desktop: gnome
Distribuzione: arch

Re: Slacky Downloader :)

Messaggio da Dani »

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 ;)

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

Re: Slacky Downloader :)

Messaggio da michelino »

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

Dani
Linux 4.x
Linux 4.x
Messaggi: 1447
Iscritto il: mer 26 apr 2006, 1:52
Desktop: gnome
Distribuzione: arch

Re: Slacky Downloader :)

Messaggio da Dani »

Rilasciata la 0.0.7 :P
Chiunque abbia altri suggerimenti o feedback da dare si faccia avanti :)

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

Re: Slacky Downloader :)

Messaggio da michelino »

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!!

Dani
Linux 4.x
Linux 4.x
Messaggi: 1447
Iscritto il: mer 26 apr 2006, 1:52
Desktop: gnome
Distribuzione: arch

Re: Slacky Downloader :)

Messaggio da Dani »

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 !

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

Re: Slacky Downloader :)

Messaggio da michelino »

Non patcha !

Dani
Linux 4.x
Linux 4.x
Messaggi: 1447
Iscritto il: mer 26 apr 2006, 1:52
Desktop: gnome
Distribuzione: arch

Re: Slacky Downloader :)

Messaggio da Dani »

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

Bloccato