Slackyd - Slacky downloader [DEAD]
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.
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 :)
Fatto :)
- michelino
- 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 :)
Te l'ho detto che mi leggi nel pensiero
- michelino
- 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 :)
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
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
Re: Slacky Downloader :)
Ok, ti posto la patch senza rilasciare una nuova versione...
Fammi sapere se va bene :)
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);
Re: Slacky Downloader :)
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
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
Patch
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
Patch
- michelino
- 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 :)
Infatti non patchava
Poiché non avevo molto tempo ho rinviato l'analisi del perché...meno male che hai provveduto prima che impazzissi .
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
Poiché non avevo molto tempo ho rinviato l'analisi del perché...meno male che hai provveduto prima che impazzissi .
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
Re: Slacky Downloader :)
Bene :Pmichelino ha scritto: 1) Lo switch -C ora funziona come detto
Non funziona proprio così, ma in maniera simile:2) Forse non mi sono spiegato per il download, io intendevo questo meccanismoNon mi sembra che la versione patchata funzioni così
- 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
-> 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
- michelino
- 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 :)
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
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
Tutto questo sempre IMVVVHO, perché il tool e fantastico e lo uso costantemente
Codice: Seleziona tutto
Unexpected error while copying file "/var/slackyd/FILELIST.TXT.tmp" to "/var/slackyd/FILELIST.TXT".
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)?
Re: Slacky Downloader :)
Su questa cosa non ho una spiegazionemichelino 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'errorehai in qualche modo cambiato la maschera dei permessi o sono io che ricordo male?Codice: Seleziona tutto
Unexpected error while copying file "/var/slackyd/FILELIST.TXT.tmp" to "/var/slackyd/FILELIST.TXT".
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
Giusto. Corretto2) 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:
A questo ci devo ancora lavorare3) 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à chiedeTutto questo sempre IMVVVHO, perché il tool e fantastico e lo uso costantementeCodice: Seleziona tutto
No changes in ChangeLog.txt between your last update and now. Do you really want to download all other files (y/N)?
Ecco la patch da applicare all'ultima versione stabile: patch
Grazie per la collaborazione
- michelino
- 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 :)
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
Funge come da modifiche.
Ripeto: grande tool!
Non mi ringraziare per la collaborazione, semplice egoismo
Re: Slacky Downloader :)
Rilasciata la 0.0.7 :P
Chiunque abbia altri suggerimenti o feedback da dare si faccia avanti :)
Chiunque abbia altri suggerimenti o feedback da dare si faccia avanti :)
- michelino
- 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 :)
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!!
Re: Slacky Downloader :)
Meglio levarlo via x-)
Da applicare all'ultima versione rilasciata chiaramente e usando patch -p1 !
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>
- michelino
- 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 :)
Non patcha !
Re: Slacky Downloader :)
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]$