summaryrefslogtreecommitdiff
path: root/nautilus-installer
diff options
context:
space:
mode:
Diffstat (limited to 'nautilus-installer')
-rw-r--r--nautilus-installer/src/installer.c100
-rw-r--r--nautilus-installer/src/main.c9
-rw-r--r--nautilus-installer/src/prescript105
3 files changed, 101 insertions, 113 deletions
diff --git a/nautilus-installer/src/installer.c b/nautilus-installer/src/installer.c
index 09df5ddf6..fcbc52fd2 100644
--- a/nautilus-installer/src/installer.c
+++ b/nautilus-installer/src/installer.c
@@ -75,7 +75,7 @@ typedef struct {
#define PACKAGE_LIST "package-list.xml"
#define TEXT_LIST "installer-strings.xml"
-#define LOGFILE "/tmp/eazel-install.log"
+#define LOGFILE "eazel-install.log"
#define FONT_NORM_BOLD _("-adobe-helvetica-bold-r-normal-*-*-120-*-*-p-*-*-*,*-r-*")
#define FONT_NORM _("-adobe-helvetica-medium-r-normal-*-*-120-*-*-p-*-*-*,*-r-*")
@@ -179,7 +179,7 @@ int installer_dont_ask_questions = 0;
char *installer_server =NULL;
int installer_server_port = 0;
char *installer_cgi_path = NULL;
-char *installer_tmpdir = NULL;
+char *installer_tmpdir = "/tmp";
char *installer_homedir = NULL;
static void check_if_next_okay (GnomeDruidPage *page, void *unused, EazelInstaller *installer);
@@ -1004,74 +1004,49 @@ add_force_remove (EazelInstaller *installer,
static void
get_detailed_errors_foreach (PackageData *pack, GetErrorsForEachData *data)
{
- char *required;
- char *required_by;
- gboolean recoverable_error = FALSE;
+ char *message, *distro;
EazelInstaller *installer = data->installer;
+ PackageData *pack_in;
PackageData *previous_pack = NULL;
+ CategoryData *cat;
+ GList *iter, *iter2;
if (data->path) {
previous_pack = (PackageData*)(data->path->data);
}
- required = packagedata_get_readable_name (pack);
- required_by = packagedata_get_readable_name (previous_pack);
-
-
- switch (pack->status) {
- case PACKAGE_UNKNOWN_STATUS:
- break;
- case PACKAGE_SOURCE_NOT_SUPPORTED:
- break;
- case PACKAGE_FILE_CONFLICT:
- break;
- case PACKAGE_DEPENDENCY_FAIL:
- break;
- case PACKAGE_BREAKS_DEPENDENCY:
- break;
- case PACKAGE_INVALID:
- break;
- case PACKAGE_CANNOT_OPEN: {
- GList *iter;
+
+ /* is this the right place for this check anymore? */
+ if (pack->status == PACKAGE_CANNOT_OPEN) {
/* check if the package we could not open was in install_categories, since
then it's a distro issue */
for (iter = installer->install_categories; iter; iter = g_list_next (iter)) {
- CategoryData *cat = (CategoryData*)iter->data;
- GList *iter2;
+ cat = (CategoryData *)iter->data;
for (iter2 = cat->packages; iter2 ; iter2 = g_list_next (iter2)) {
- PackageData *pack = (PackageData*)iter2->data;
- if (strcmp (required, pack->name)==0) {
- char *tmp = "Your distribution might not be supported";
- installer->failure_info = g_list_prepend (installer->failure_info,
- tmp);
+ pack_in = (PackageData *)iter2->data;
+ if (strcmp (pack->name, pack_in->name) == 0) {
+ distro = trilobite_get_distribution_name (trilobite_get_distribution (),
+ TRUE, FALSE);
+ message = g_strdup_printf (_("Initial package download failed: Possibly your "
+ "distribution (%s) isn't supported by Eazel yet, "
+ "or the Eazel servers are offline."),
+ distro);
+ installer->failure_info = g_list_prepend (installer->failure_info, message);
+ g_free (distro);
}
}
}
}
- break;
- case PACKAGE_PARTLY_RESOLVED:
- break;
- case PACKAGE_ALREADY_INSTALLED:
- break;
- case PACKAGE_CIRCULAR_DEPENDENCY:
- break;
- case PACKAGE_RESOLVED:
- recoverable_error = TRUE; /* duh. */
- break;
- }
- if (pack->conflicts_checked && !pack->toplevel) {
/*
+ if (pack->conflicts_checked && !pack->toplevel) {
GList *packages;
CategoryData *cat = (CategoryData*)(installer->install_categories->data);
g_message ("adding %s to install_categories", required);
packages = cat->packages;
packages = g_list_prepend (packages, pack);
cat->packages = packages;
-*/
}
-
- g_free (required);
- g_free (required_by);
+*/
/* Create the path list */
data->path = g_list_prepend (data->path, pack);
@@ -1660,7 +1635,7 @@ eazel_installer_post_install (EazelInstaller *installer)
jump_to_error_page (installer, installer->failure_info,
text_labels [ERROR_LABEL],
text_labels [ERROR_LABEL_2]);
- } else if (installer->force_remove_categories==NULL) {
+ } else if (installer->force_remove_categories == NULL) {
gnome_druid_set_page (installer->druid, installer->finish_good);
}
}
@@ -1854,6 +1829,7 @@ start_logging (EazelInstaller *installer)
int fd;
FILE *fp;
struct stat statbuf, lstatbuf;
+ char *filename;
if (installer_debug) {
eazel_install_log_to_stderr (installer->service, TRUE);
@@ -1865,7 +1841,8 @@ start_logging (EazelInstaller *installer)
/* wow, linux defines this but it's completely non-functional on linux. :( */
flags |= O_NOFOLLOW;
#endif
- fd = open (LOGFILE, flags, 0600);
+ filename = g_strdup_printf ("%s/%s", installer_tmpdir, LOGFILE);
+ fd = open (filename, flags, 0600);
/* make sure that:
* - owned by root (uid = 0)
* - the mode is X00 (group/other can't read/write/execute)
@@ -1874,14 +1851,14 @@ start_logging (EazelInstaller *installer)
* - hardlink count = 1
*/
if ((fd >= 0) && (fstat (fd, &statbuf) == 0) &&
- (lstat (LOGFILE, &lstatbuf) == 0) &&
+ (lstat (filename, &lstatbuf) == 0) &&
((lstatbuf.st_mode & S_IFLNK) != S_IFLNK) &&
((statbuf.st_mode & 0077) == 0) &&
(statbuf.st_mode & S_IFREG) &&
(statbuf.st_nlink == 1) &&
(statbuf.st_uid == 0)) {
/* this is our file -- truncate and start over */
- fprintf (stderr, "Writing logfile to %s ...\n", LOGFILE);
+ fprintf (stderr, "Writing logfile to %s ...\n", filename);
ftruncate (fd, 0);
fp = fdopen (fd, "wt");
eazel_install_set_log (installer->service, fp);
@@ -1889,8 +1866,9 @@ start_logging (EazelInstaller *installer)
if (fd >= 0) {
close (fd);
}
- fprintf (stderr, "Can't write to %s :(\n", LOGFILE);
+ fprintf (stderr, "Can't write to %s :(\n", filename);
}
+ g_free (filename);
g_message ("Eazel-Installer v" VERSION " (build " BUILD_DATE ")");
}
@@ -1907,14 +1885,14 @@ find_old_tmpdir (void)
char *old_package_list;
struct stat statbuf;
- dirfd = opendir ("/tmp");
+ dirfd = opendir (installer_tmpdir);
if (dirfd == NULL) {
return NULL;
}
while ((file = readdir (dirfd)) != NULL) {
if ((old_tmpdir == NULL) && (strlen (file->d_name) > strlen (TMPDIR_PREFIX)) &&
(strncmp (file->d_name, TMPDIR_PREFIX, strlen (TMPDIR_PREFIX)) == 0)) {
- old_tmpdir = g_strdup_printf ("/tmp/%s", file->d_name);
+ old_tmpdir = g_strdup_printf ("%s/%s", installer_tmpdir, file->d_name);
if ((stat (old_tmpdir, &statbuf) == 0) &&
((statbuf.st_mode & 0777) == 0700) &&
(statbuf.st_mode & S_IFDIR) &&
@@ -1971,16 +1949,14 @@ eazel_installer_initialize (EazelInstaller *object) {
installer = EAZEL_INSTALLER (object);
- if (installer_tmpdir == NULL) {
- installer_tmpdir = find_old_tmpdir ();
- }
-
- if (installer_tmpdir == NULL) {
+ tmpdir = find_old_tmpdir ();
+ if (tmpdir == NULL) {
/* attempt to create a directory we can use */
#define RANDCHAR ('A' + (rand () % 23))
srand (time (NULL));
for (tries = 0; tries < 50; tries++) {
- tmpdir = g_strdup_printf ("/tmp/eazel-installer.%c%c%c%c%c%c%d",
+ tmpdir = g_strdup_printf ("%s/eazel-installer.%c%c%c%c%c%c%d",
+ installer_tmpdir,
RANDCHAR, RANDCHAR, RANDCHAR, RANDCHAR,
RANDCHAR, RANDCHAR, (rand () % 1000));
if (mkdir (tmpdir, 0700) == 0) {
@@ -1991,8 +1967,6 @@ eazel_installer_initialize (EazelInstaller *object) {
if (tries == 50) {
g_error (_("Cannot create temporary directory"));
}
- } else {
- tmpdir = installer_tmpdir;
}
installer->tmpdir = tmpdir;
@@ -2043,7 +2017,7 @@ eazel_installer_initialize (EazelInstaller *object) {
installer_server_port ? installer_server_port : PORT_NUMBER,
"package_list", package_destination,
"package_list_storage_path", PACKAGE_LIST,
- "transaction_dir", "/tmp",
+ "transaction_dir", installer_tmpdir,
"cgi_path", installer_cgi_path ? installer_cgi_path : CGI_PATH,
NULL));
diff --git a/nautilus-installer/src/main.c b/nautilus-installer/src/main.c
index 7db0915ff..122eab65a 100644
--- a/nautilus-installer/src/main.c
+++ b/nautilus-installer/src/main.c
@@ -59,7 +59,7 @@ static const struct poptOption options[] = {
{"force", 'f', POPT_ARG_NONE, &installer_force, 0, N_("Forced install"), NULL},
{"local", '\0', POPT_ARG_STRING, &installer_local, 0, N_("Use local RPMs instead of HTTP server"), "XML-file"},
{"server", '\0', POPT_ARG_STRING, &installer_server, 0, N_("Specify Eazel installation server"), NULL},
- {"tmpdir", '\0', POPT_ARG_STRING, &installer_tmpdir, 0, N_("Specify download dir"), NULL},
+ {"tmpdir", 'T', POPT_ARG_STRING, &installer_tmpdir, 0, N_("Temporary directory to use for downloaded files (default: /tmp)"), NULL},
{"homedir", '\0', POPT_ARG_STRING|POPT_ARGFLAG_DOC_HIDDEN, &installer_homedir, 0, "", NULL},
{"user", '\0', POPT_ARG_STRING|POPT_ARGFLAG_DOC_HIDDEN, &installer_user, 0, "", NULL},
{"package", '\0', POPT_ARG_STRING, &installer_package, 0 , N_("Install package"), NULL},
@@ -75,6 +75,7 @@ main (int argc, char *argv[])
{
EazelInstaller *installer;
char *fake_argv0 = "eazel-installer.sh";
+ struct stat statbuf;
#ifdef ENABLE_NLS
bindtextdomain ("eazel-installer", GNOMELOCALEDIR);
@@ -113,6 +114,12 @@ main (int argc, char *argv[])
}
}
+ if (stat (installer_tmpdir, &statbuf) != 0) {
+ printf ("*** Unable to access the temporary directory %s\n", installer_tmpdir);
+ printf (" You may need to specify a directory using -T\n");
+ exit (1);
+ }
+
installer = eazel_installer_new ();
gtk_main ();
diff --git a/nautilus-installer/src/prescript b/nautilus-installer/src/prescript
index fbf425a3f..e1a2708fb 100644
--- a/nautilus-installer/src/prescript
+++ b/nautilus-installer/src/prescript
@@ -1,63 +1,70 @@
if test x$DISPLAY = x; then
- echo "The Nautilus-Installer requires X"
- exit
+ echo "Eazel Installer requires X to be running."
+ exit
fi
-params="DISPLAY=$DISPLAY"
-if test x$http_proxy = x; then
- params="$params"
-else
- params="$params http_proxy=$http_proxy"
+export="export DISPLAY botan_rice_candy"
+params="DISPLAY=$DISPLAY && botan_rice_candy=yum"
+
+# Check proxy settings
+if test x$http_proxy '!=' x; then
+ export="$export http_proxy"
+ params="$params && http_proxy=$http_proxy"
fi
# Figure out what is already installed
PR1_TO_PR2=no
-if [ -f /usr/bin/nautilus ]; then
- VERSION=`/usr/bin/nautilus --version`
- if [ "x$VERSION" = "xGnome nautilus 0.1.0" ]; then
- PR1_TO_PR2=yes
- fi
+if test -f /usr/bin/nautilus; then
+ VERSION=`/usr/bin/nautilus --version`
+ if [ "x$VERSION" = "xGnome nautilus 0.1.0" ]; then
+ PR1_TO_PR2=yes
+ fi
fi
-if test $UID -ne 0 -a "x$1" '!=' "x--version" -a "x$1" '!=' "x--build"; then
-
- # blurp
- echo ""
- echo "Eazel Installer PR2"
- echo ""
- echo "Eazel Installer requires superuser (root) access to prepare the system"
- echo "and to install packages."
- echo ""
- if [ "x$PR1_TO_PR2" = "xyes" ]; then
- echo "Your PR1 setttings will be moved to ~/.nautilus.pr2.backup..."
- echo ""
- fi
-
- # Start
- echo "Please enter root password at the prompt."
- xhost + localhost
- su - -c "export $params && cd $PWD && echo Uncompressing... && sh $0 $* --user $USER"
- xhost - localhost
-
- # Move config
- if [ "x$PR1_TO_PR2" = "xyes" ]; then
- VERSION=`/usr/bin/nautilus --version`
- if [ "x$VERSION" != "xGNOME nautilus 0.1.0" ]; then
- echo "Saving old settings..."
- mkdir -p $HOME/.nautilus.pr2.backup >& /dev/null
- mv -f $HOME/.nautilus $HOME/.nautilus.pr2.backup/ >& /dev/null
- mv -f $HOME/Nautilus $HOME/.nautilus.pr2.backup/ >& /dev/null
- mv -f $HOME/.gconf/apps/nautilus/ $HOME/.nautilus.pr2.backup/ >& /dev/null
- mv -f $HOME/.gconf/apps/eazel-trilobite/ $HOME/.nautilus.pr2.backup/ >& /dev/null
- fi
- fi
+if test "x$1" = "x--version" -o "x$1" = "x--build" -o "x$1" = "x--help"; then
+ QUICK=yes
+fi
- exit
+# First time through? spam...
+if test "x$botan_rice_candy" = "x" -a "x$QUICK" '!=' "xyes"; then
+ # blurp
+ echo ""
+ echo "Eazel Installer PR2"
+ echo ""
+ if test "x$PR1_TO_PR2" = "xyes"; then
+ echo "Your PR1 setttings will be moved to ~/.nautilus.pr2.backup..."
+ echo ""
+ fi
fi
-USER_TEST=no
-echo "$*" | grep -- --user > /dev/null && USER_TEST=yes
+if test $UID -ne 0 -a "x$QUICK" '!=' "xyes"; then
+ echo "Eazel Installer requires superuser (root) access to prepare the system"
+ echo "and to install packages."
+ echo ""
+
+ # Start
+ echo "Please enter root password at the prompt."
+ xhost + localhost
+ /bin/su -s /bin/sh -c "$params && $export && cd $PWD && echo Uncompressing... && /bin/sh $0 $* --user $USER"
+ xhost - localhost
-if [ "x$USER_TEST" != "xyes" ]; then
- sh $0 "$@" --user $USER
+ # FIXME: this will only work if they didn't run as root.
+ # Move config
+ if test "x$PR1_TO_PR2" = "xyes"; then
+ VERSION=`/usr/bin/nautilus --version`
+ if test "x$VERSION" != "xGNOME nautilus 0.1.0"; then
+ echo "Saving old settings..."
+ mkdir -p $HOME/.nautilus.pr2.backup >& /dev/null
+ mv -f $HOME/.nautilus $HOME/.nautilus.pr2.backup/ >& /dev/null
+ mv -f $HOME/Nautilus $HOME/.nautilus.pr2.backup/ >& /dev/null
+ mv -f $HOME/.gconf/apps/nautilus/ $HOME/.nautilus.pr2.backup/ >& /dev/null
+ mv -f $HOME/.gconf/apps/eazel-trilobite/ $HOME/.nautilus.pr2.backup/ >& /dev/null
+ fi
+ fi
+ exit
+else
+ if test "x$botan_rice_candy" = "x"; then
+ # running as root, or has "--{version|build|help}" command-line option
+ /bin/sh -c "$params && $export && cd $PWD && /bin/sh $0 $* --user $USER"
exit
+ fi
fi