From 3341ed2c5f137b642575ba25af888b32cf707bc1 Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Tue, 21 Jun 2011 23:50:58 +0200 Subject: [PATCH 01/12] anaconda: Remove unused variables to let compile with -Werror=unused-but-set-variable --- anaconda/gptsync/gptsync.c | 5 ++--- anaconda/gptsync/os_unix.c | 4 +--- anaconda/isys/eddsupport.c | 6 ++++-- anaconda/isys/uncpio.c | 6 +----- anaconda/loader/driverdisk.c | 4 ++-- anaconda/loader/driverselect.c | 8 -------- anaconda/loader/fwloader.c | 18 ++++++++---------- anaconda/loader/init.c | 27 +++++++++++---------------- anaconda/loader/loader.c | 31 +++++++++++++++---------------- anaconda/loader/moduleinfo.c | 2 -- anaconda/loader/modules.c | 3 +-- anaconda/loader/shutdown.c | 3 +-- anaconda/loader/telnet.c | 22 ++++++++++------------ anaconda/loader/telnetd.c | 3 +-- anaconda/loader/undomounts.c | 5 +---- anaconda/utils/mapshdr.c | 6 +++--- anaconda/xutils.c | 4 +--- 17 files changed, 62 insertions(+), 95 deletions(-) diff --git a/anaconda/gptsync/gptsync.c b/anaconda/gptsync/gptsync.c index 3ad26bf..94c37eb 100644 --- a/anaconda/gptsync/gptsync.c +++ b/anaconda/gptsync/gptsync.c @@ -222,7 +222,6 @@ static UINTN analyze(VOID) UINTN i, k, iter, count_active, detected_parttype; CHARN *fsname; UINT64 min_start_lba; - UINTN status; BOOLEAN have_esp; new_mbr_part_count = 0; @@ -237,7 +236,7 @@ static UINTN analyze(VOID) gpt_parts[i].mbr_type = gpt_parts[i].gpt_parttype->mbr_type; if (gpt_parts[i].gpt_parttype->kind == GPT_KIND_BASIC_DATA) { // Basic Data: need to look at data in the partition - status = detect_mbrtype_fs(gpt_parts[i].start_lba, &detected_parttype, &fsname); + detect_mbrtype_fs(gpt_parts[i].start_lba, &detected_parttype, &fsname); if (detected_parttype) gpt_parts[i].mbr_type = detected_parttype; else @@ -245,7 +244,7 @@ static UINTN analyze(VOID) } else if (gpt_parts[i].mbr_type == 0xef) { // EFI System Partition: GNU parted can put this on any partition, // need to detect file systems - status = detect_mbrtype_fs(gpt_parts[i].start_lba, &detected_parttype, &fsname); + detect_mbrtype_fs(gpt_parts[i].start_lba, &detected_parttype, &fsname); if (!have_esp && (detected_parttype == 0x01 || detected_parttype == 0x0e || detected_parttype == 0x0c)) ; // seems to be a legitimate ESP, don't change else if (detected_parttype) diff --git a/anaconda/gptsync/os_unix.c b/anaconda/gptsync/os_unix.c index b43685b..acf32f9 100644 --- a/anaconda/gptsync/os_unix.c +++ b/anaconda/gptsync/os_unix.c @@ -185,7 +185,6 @@ int main(int argc, char *argv[]) char *filename; struct stat sb; int filekind; - UINT64 filesize; char *reason; int status; @@ -207,10 +206,9 @@ int main(int argc, char *argv[]) } filekind = 0; - filesize = 0; reason = NULL; if (S_ISREG(sb.st_mode)) - filesize = sb.st_size; + filekind = 0; else if (S_ISBLK(sb.st_mode)) filekind = 1; else if (S_ISCHR(sb.st_mode)) diff --git a/anaconda/isys/eddsupport.c b/anaconda/isys/eddsupport.c index c50278e..786e1f3 100644 --- a/anaconda/isys/eddsupport.c +++ b/anaconda/isys/eddsupport.c @@ -149,7 +149,7 @@ static int mapBiosDisks(struct device** devices,const char *path) { char * sigFileName; uint32_t mbrSig, biosNum, currentSig; struct device **currentDev, **foundDisk; - int i, rc, ret, dm_nr, highest_dm; + int i, rc, dm_nr, highest_dm; dirHandle = opendir(path); if(!dirHandle){ @@ -173,7 +173,7 @@ static int mapBiosDisks(struct device** devices,const char *path) { if(!strncmp(entry->d_name,".",1) || !strncmp(entry->d_name,"..",2)) { continue; } - ret = sscanf((entry->d_name+9), "%x", &biosNum); + sscanf((entry->d_name+9), "%x", &biosNum); sigFileName = malloc(strlen(path) + strlen(entry->d_name) + 20); sprintf(sigFileName, "%s/%s/%s", path, entry->d_name, SIG_FILE); @@ -332,6 +332,8 @@ char * getBiosDisk(char *biosStr) { return NULL; ret = sscanf(biosStr,"%x",&biosNum); + if (!ret) + return NULL; disk = lookupHashItem(mbrSigToName, biosNum); if (disk) return disk->diskname; diff --git a/anaconda/isys/uncpio.c b/anaconda/isys/uncpio.c index 171eb6b..c8539bb 100644 --- a/anaconda/isys/uncpio.c +++ b/anaconda/isys/uncpio.c @@ -137,13 +137,12 @@ static inline int padoutfd(struct ourfd * fd, size_t * where, int modulo) { static int strntoul(const char * str, char ** endptr, int base, int num) { char * buf, * end; - unsigned long ret; buf = alloca(num + 1); strncpy(buf, str, num); buf[num] = '\0'; - ret = strtoul(buf, &end, base); + strtoul(buf, &end, base); if (*end) *endptr = (char *)(str + (end - buf)); /* XXX discards const */ else @@ -491,7 +490,6 @@ int myCpioInstallArchive(gzFile stream, struct cpioFileMapping * mappings, int linkNum = 0; struct cpioFileMapping * map = NULL; struct cpioFileMapping needle; - mode_t cpioMode; int olderr; struct cpioCallbackInfo cbInfo; struct hardLink * links = NULL; @@ -523,8 +521,6 @@ int myCpioInstallArchive(gzFile stream, struct cpioFileMapping * mappings, if (mappings && !map) { eatBytes(&fd, ch.size); } else { - cpioMode = ch.mode; - if (map) { if (map->mapFlags & CPIO_MAP_PATH) { free(ch.path); diff --git a/anaconda/loader/driverdisk.c b/anaconda/loader/driverdisk.c index 1526611..3790b23 100644 --- a/anaconda/loader/driverdisk.c +++ b/anaconda/loader/driverdisk.c @@ -276,7 +276,7 @@ static int loadDriverDisk(struct loaderData_s *loaderData, char *mntpt) { struct moduleBallLocation * location; struct stat sb; static int disknum = 0; - int fd, ret; + int fd; /* check for new version */ sprintf(file, "%s/rhdd3", mntpt); @@ -288,7 +288,7 @@ static int loadDriverDisk(struct loaderData_s *loaderData, char *mntpt) { title = malloc(sb.st_size + 1); fd = open(file, O_RDONLY); - ret = read(fd, title, sb.st_size); + read(fd, title, sb.st_size); if (title[sb.st_size - 1] == '\n') sb.st_size--; title[sb.st_size] = '\0'; diff --git a/anaconda/loader/driverselect.c b/anaconda/loader/driverselect.c index f9379f0..108ee29 100644 --- a/anaconda/loader/driverselect.c +++ b/anaconda/loader/driverselect.c @@ -121,7 +121,6 @@ static int getManualModuleArgs(struct moduleInfo * mod, gchar *** moduleArgs) { int chooseManualDriver(int class, struct loaderData_s *loaderData) { int i, numSorted, num = 0, done = 0; - enum driverMajor type; struct sortModuleList * sortedOrder; char giveArgs = ' '; gchar **moduleArgs = NULL; @@ -131,13 +130,6 @@ int chooseManualDriver(int class, struct loaderData_s *loaderData) { newtGrid grid, buttons; struct newtExitStruct es; - if (class == DEVICE_NETWORK) - type = DRIVER_NET; - else if (class == DEVICE_DISK || class == DEVICE_CDROM) - type = DRIVER_SCSI; - else - type = DRIVER_ANY; - do { sortedOrder = malloc(sizeof(*sortedOrder) * modInfo->numModules); numSorted = 0; diff --git a/anaconda/loader/fwloader.c b/anaconda/loader/fwloader.c index a91ff6b..2faaa78 100644 --- a/anaconda/loader/fwloader.c +++ b/anaconda/loader/fwloader.c @@ -80,7 +80,7 @@ static inline int set_fd_coe(int fd, int enable) static int open_uevent_socket(struct fw_loader *fwl) { - int fd, rc; + int fd; struct sockaddr_nl sa; fd = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT); @@ -102,14 +102,14 @@ static int open_uevent_socket(struct fw_loader *fwl) fd = open("/proc/sys/kernel/hotplug", O_RDWR); if (fd >= 0) { - rc = ftruncate(fd, 0); - rc = write(fd, "\n", 1); + ftruncate(fd, 0); + write(fd, "\n", 1); close(fd); } fd = open("/sys/class/firmware/timeout", O_RDWR); if (fd >= 0) { - rc = write(fd, "10", 2); + write(fd, "10", 2); close(fd); } @@ -128,7 +128,6 @@ static void kill_hotplug_signal(int signum) static int daemonize(struct fw_loader *fwl) { int fd; - int rc; signal(SIGTERM, kill_hotplug_signal); signal(SIGSEGV, loaderSegvHandler); @@ -142,11 +141,11 @@ static int daemonize(struct fw_loader *fwl) sigemptyset(&fwl->sigmask); prctl(PR_SET_NAME, "hotplug", 0, 0, 0); - rc = chdir("/"); + chdir("/"); fd = open("/proc/self/oom_adj", O_RDWR); if (fd >= 0) { - rc = write(fd, "-17", 3); + write(fd, "-17", 3); close(fd); } @@ -342,7 +341,6 @@ fetcher(char *inpath, int outfd) size_t inlen; int count; int en = 0; - int rc; errno = 0; if (access(inpath, F_OK)) @@ -352,8 +350,8 @@ fetcher(char *inpath, int outfd) goto out; lseek(outfd, 0, SEEK_SET); - rc = ftruncate(outfd, 0); - rc = ftruncate(outfd, inlen); + ftruncate(outfd, 0); + ftruncate(outfd, inlen); count = 0; while (count < inlen) { diff --git a/anaconda/loader/init.c b/anaconda/loader/init.c index 8160ae3..e3ccf56 100644 --- a/anaconda/loader/init.c +++ b/anaconda/loader/init.c @@ -127,8 +127,7 @@ static void doExit(int result) } static void printstr(char * string) { - int ret; - ret = write(1, string, strlen(string)); + write(1, string, strlen(string)); } static void fatal_error(int usePerror) { @@ -143,7 +142,6 @@ static void fatal_error(int usePerror) { /* sets up and launches syslog */ static void startSyslog(void) { int conf_fd; - int ret; char addr[128]; char forwardtcp[] = "*.* @@"; @@ -156,9 +154,9 @@ static void startSyslog(void) { printf("syslog forwarding will not be enabled\n"); sleep(5); } else { - ret = write(conf_fd, forwardtcp, strlen(forwardtcp)); - ret = write(conf_fd, addr, strlen(addr)); - ret = write(conf_fd, "\n", 1); + write(conf_fd, forwardtcp, strlen(forwardtcp)); + write(conf_fd, addr, strlen(addr)); + write(conf_fd, "\n", 1); close(conf_fd); } } @@ -365,7 +363,7 @@ static void getSyslog(char *addr) { } static int getInitPid(void) { - int fd = 0, pid = -1, ret; + int fd = 0, pid = -1; char * buf = calloc(1, 10); fd = open("/var/run/init.pid", O_RDONLY); @@ -373,9 +371,9 @@ static int getInitPid(void) { fprintf(stderr, "Unable to find pid of init!!!\n"); return -1; } - ret = read(fd, buf, 9); + read(fd, buf, 9); close(fd); - ret = sscanf(buf, "%d", &pid); + sscanf(buf, "%d", &pid); return pid; } @@ -658,11 +656,10 @@ int main(int argc, char **argv) { tcsetattr(0, TCSANOW, &ts); } - int ret; - ret = sethostname("localhost.localdomain", 21); + sethostname("localhost.localdomain", 21); /* the default domainname (as of 2.0.35) is "(none)", which confuses glibc */ - ret = setdomainname("", 0); + setdomainname("", 0); printf("trying to remount root filesystem read write... "); if (mount("/", "/", "ext2", MS_REMOUNT | MS_MGC_VAL, NULL)) { @@ -691,10 +688,9 @@ int main(int argc, char **argv) { /* write out a pid file */ if ((fd = open("/var/run/init.pid", O_WRONLY|O_CREAT, 0644)) > 0) { char * buf = malloc(10); - int ret; snprintf(buf, 9, "%d", getpid()); - ret = write(fd, buf, strlen(buf)); + write(fd, buf, strlen(buf)); close(fd); free(buf); } else { @@ -759,9 +755,8 @@ int main(int argc, char **argv) { ctrl-alt-del handler */ if (count == strlen(buf) && (fd = open("/proc/sys/kernel/ctrl-alt-del", O_WRONLY)) != -1) { - int ret; - ret = write(fd, "0", 1); + write(fd, "0", 1); close(fd); } } diff --git a/anaconda/loader/loader.c b/anaconda/loader/loader.c index a601f0f..fea4b3c 100644 --- a/anaconda/loader/loader.c +++ b/anaconda/loader/loader.c @@ -1660,7 +1660,6 @@ static int manualDeviceCheck(struct loaderData_s *loaderData) { * with a '/' */ static void migrate_runtime_directory(char * dirname) { char * runtimedir; - int ret; checked_asprintf(&runtimedir, "/mnt/runtime%s", dirname); @@ -1670,10 +1669,10 @@ static void migrate_runtime_directory(char * dirname) { checked_asprintf(&olddir, "%s_old", dirname); - ret = rename(dirname, olddir); + rename(dirname, olddir); free(olddir); } - ret = symlink(runtimedir, dirname); + symlink(runtimedir, dirname); } free(runtimedir); } @@ -1832,7 +1831,7 @@ static void loadScsiDhModules(void) } int main(int argc, char ** argv) { - int rc, ret, pid, status; + int rc, pid, status; struct stat sb; struct serial_struct si; @@ -2128,7 +2127,7 @@ int main(int argc, char ** argv) { migrate_runtime_directory("/usr"); migrate_runtime_directory("/lib"); migrate_runtime_directory("/lib64"); - ret = symlink("/mnt/runtime/etc/selinux", "/etc/selinux"); + symlink("/mnt/runtime/etc/selinux", "/etc/selinux"); copyDirectory("/mnt/runtime/etc","/etc", NULL, copyErrorFn); copyDirectory("/mnt/runtime/var","/var", NULL, copyErrorFn); @@ -2216,11 +2215,11 @@ int main(int argc, char ** argv) { if (strncmp(url, "ftp:", 4)) { *argptr++ = url; } else { - int fd, ret; + int fd; fd = open("/tmp/ftp-stage2", O_CREAT | O_TRUNC | O_RDWR, 0600); - ret = write(fd, url, strlen(url)); - ret = write(fd, "\r", 1); + write(fd, url, strlen(url)); + write(fd, "\r", 1); close(fd); *argptr++ = "@/tmp/ftp-stage2"; } @@ -2315,11 +2314,11 @@ int main(int argc, char ** argv) { if (strncmp(loaderData.instRepo, "ftp:", 4)) { *argptr++ = loaderData.instRepo; } else { - int fd, ret; + int fd; fd = open("/tmp/ftp-repo", O_CREAT | O_TRUNC | O_RDWR, 0600); - ret = write(fd, loaderData.instRepo, strlen(loaderData.instRepo)); - ret = write(fd, "\r", 1); + write(fd, loaderData.instRepo, strlen(loaderData.instRepo)); + write(fd, "\r", 1); close(fd); *argptr++ = "@/tmp/ftp-repo"; } @@ -2331,15 +2330,15 @@ int main(int argc, char ** argv) { *argptr++ = strdup(loaderData.proxy); if (loaderData.proxyUser && strcmp(loaderData.proxyUser, "")) { - int fd, ret; + int fd; fd = open("/tmp/proxy", O_CREAT|O_TRUNC|O_RDWR, 0600); - ret = write(fd, loaderData.proxyUser, strlen(loaderData.proxyUser)); - ret = write(fd, "\r\n", 2); + write(fd, loaderData.proxyUser, strlen(loaderData.proxyUser)); + write(fd, "\r\n", 2); if (loaderData.proxyPassword && strcmp(loaderData.proxyPassword, "")) { - ret = write(fd, loaderData.proxyPassword, strlen(loaderData.proxyPassword)); - ret = write(fd, "\r\n", 2); + write(fd, loaderData.proxyPassword, strlen(loaderData.proxyPassword)); + write(fd, "\r\n", 2); } close(fd); diff --git a/anaconda/loader/moduleinfo.c b/anaconda/loader/moduleinfo.c index 2e0ab77..61d1681 100644 --- a/anaconda/loader/moduleinfo.c +++ b/anaconda/loader/moduleinfo.c @@ -93,7 +93,6 @@ int readModuleInfo(const char * filename, moduleInfoSet mis, int fd, isIndented; char * buf, * start, * next = NULL, * chptr; struct stat sb; - char oldch; struct moduleInfo * nextModule; int modulesAlloced; int i; @@ -223,7 +222,6 @@ int readModuleInfo(const char * filename, moduleInfoSet mis, chptr = start; while (!isspace(*chptr) && *chptr) chptr++; if (*chptr) { - oldch = *chptr; *chptr = '\0'; nextModule->args[nextModule->numArgs].arg = strdup(start); diff --git a/anaconda/loader/modules.c b/anaconda/loader/modules.c index 07f781a..a7b58f7 100644 --- a/anaconda/loader/modules.c +++ b/anaconda/loader/modules.c @@ -363,7 +363,6 @@ void loadKickstartModule(struct loaderData_s * loaderData, gchar *opts = NULL; gchar *module = NULL; gchar **args = NULL, **remaining = NULL; - gboolean rc; GOptionContext *optCon = g_option_context_new(NULL); GError *optErr = NULL; GOptionEntry ksDeviceOptions[] = { @@ -404,7 +403,7 @@ void loadKickstartModule(struct loaderData_s * loaderData, args = g_strsplit(opts, " ", 0); } - rc = mlLoadModule(module, args); + mlLoadModule(module, args); g_strfreev(args); return; } diff --git a/anaconda/loader/shutdown.c b/anaconda/loader/shutdown.c index 3b481f2..c0dc46b 100644 --- a/anaconda/loader/shutdown.c +++ b/anaconda/loader/shutdown.c @@ -49,7 +49,6 @@ static void performTerminations(void) { } static void performUnmounts(void) { - int ignore; printf("disabling swap...\n"); disableSwap(); @@ -58,7 +57,7 @@ static void performUnmounts(void) { unmountFilesystems(); printf("waiting for mdraid sets to become clean...\n"); - ignore = system("/sbin/mdadm --wait-clean --scan"); + system("/sbin/mdadm --wait-clean --scan"); } static void performReboot(reboot_action rebootAction) { diff --git a/anaconda/loader/telnet.c b/anaconda/loader/telnet.c index a2c0b20..b6b45a6 100644 --- a/anaconda/loader/telnet.c +++ b/anaconda/loader/telnet.c @@ -78,31 +78,30 @@ telnet_negotiate(int socket, char ** term_type_ptr, int * heightPtr, IAC DO NAWS IAC SB TERMINAL_TYPE "\x01" IAC SE ; - int ret; - ret = write(socket, request, sizeof(request)-1); + write(socket, request, sizeof(request)-1); /* Read from the terminal until we get the terminal type. This will do bad things if the client doesn't send the terminal type, but those clients have existed for aeons (right?) */ do { - ret = read(socket, &ch, 1); + read(socket, &ch, 1); if (ch != '\xff') { abort(); } - ret = read(socket, &ch, 1); /* command */ + read(socket, &ch, 1); /* command */ if (ch != '\xfa') { - ret = read(socket, &ch, 1); /* verb */ + read(socket, &ch, 1); /* verb */ continue; } - ret = read(socket, &ch, 1); /* suboption */ + read(socket, &ch, 1); /* suboption */ if (ch == '\x18') { state = ST_TERMTYPE; - ret = read(socket, &ch, 1); /* should be 0x0! */ + read(socket, &ch, 1); /* should be 0x0! */ done = 1; } else if (ch == '\x1f') { state = ST_WINDOWSIZE; @@ -110,7 +109,7 @@ telnet_negotiate(int socket, char ** term_type_ptr, int * heightPtr, state = ST_NONE;; } - ret = read(socket, &ch, 1); /* data */ + read(socket, &ch, 1); /* data */ while (ch != '\xff') { if (state == ST_TERMTYPE) { if (termAlloced == termLength) { @@ -124,10 +123,10 @@ telnet_negotiate(int socket, char ** term_type_ptr, int * heightPtr, *sizePtr++ = ch; } - ret = read(socket, &ch, 1); /* data */ + read(socket, &ch, 1); /* data */ } - ret = read(socket, &ch, 1); /* should be a SE */ + read(socket, &ch, 1); /* should be a SE */ } while (!done); @@ -254,7 +253,6 @@ void telnet_send_output(int sock, char *data, int len) { char *s, *d; /* source, destination */ char *buf; - int ret; buf = alloca((len*2)+1); /* max necessary size */ @@ -269,5 +267,5 @@ telnet_send_output(int sock, char *data, int len) { } /* now send it... */ - ret = write(sock, buf, len); + write(sock, buf, len); } diff --git a/anaconda/loader/telnetd.c b/anaconda/loader/telnetd.c index 7616181..fc47a14 100644 --- a/anaconda/loader/telnetd.c +++ b/anaconda/loader/telnetd.c @@ -169,7 +169,6 @@ int beTelnet(void) { } if (fds[1].revents) { - int ret; i = read(conn, buf, sizeof(buf)); /* connection went away */ @@ -177,7 +176,7 @@ int beTelnet(void) { break; i = telnet_process_input(&ts, buf, i); - ret = write(masterFd, buf, i); + write(masterFd, buf, i); #ifdef DEBUG_TELNET { int j; diff --git a/anaconda/loader/undomounts.c b/anaconda/loader/undomounts.c index af5caaa..fc75d04 100644 --- a/anaconda/loader/undomounts.c +++ b/anaconda/loader/undomounts.c @@ -52,9 +52,8 @@ struct unmountInfo { void undoLoop(struct unmountInfo * fs, int numFs, int this); static void printstr(char * string) { - int ret; - ret = write(1, string, strlen(string)); + write(1, string, strlen(string)); } void undoMount(struct unmountInfo * fs, int numFs, int this) { @@ -127,7 +126,6 @@ void unmountFilesystems(void) { int numFilesystems = 0; int i; struct loop_info li; - char * device; struct stat sb; fd = open("/proc/mounts", O_RDONLY, 0); @@ -145,7 +143,6 @@ void unmountFilesystems(void) { chptr = buf; while (*chptr) { - device = chptr; while (*chptr != ' ') chptr++; *chptr++ = '\0'; start = chptr; diff --git a/anaconda/utils/mapshdr.c b/anaconda/utils/mapshdr.c index f2209c7..894cd72 100644 --- a/anaconda/utils/mapshdr.c +++ b/anaconda/utils/mapshdr.c @@ -29,13 +29,13 @@ int main(int argc, char ** argv) { struct kmapHeader h; struct kmapInfo info; - int i, x; + int i; struct stat sb; char * chptr; h.magic = KMAP_MAGIC; h.numEntries = argc - 1; - x = write(1, &h, sizeof(h)); + write(1, &h, sizeof(h)); for (i = 1; i < argc; i++) { if (stat(argv[i], &sb)) { @@ -52,7 +52,7 @@ int main(int argc, char ** argv) { *chptr = '\0'; info.size = sb.st_size; - x = write(1, &info, sizeof(info)); + write(1, &info, sizeof(info)); } return 0; diff --git a/anaconda/xutils.c b/anaconda/xutils.c index 372ffca..6e49798 100644 --- a/anaconda/xutils.c +++ b/anaconda/xutils.c @@ -262,7 +262,5 @@ getXatom(PyObject *s, PyObject *args) void initxutils () { - PyObject * d; - - d = Py_InitModule ("xutils", xutilsMethods); + Py_InitModule ("xutils", xutilsMethods); } From 2492505537bb7ee0decda80419859a4297c85d16 Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Thu, 23 Jun 2011 12:20:14 +0200 Subject: [PATCH 02/12] Verify packages downloaded by yumdownloader (#229) --- Makefile | 1 + anaconda/scripts/buildinstall | 1 + anaconda/scripts/mk-images | 3 +++ anaconda/scripts/mk-images.efi | 2 ++ revisor/F13-buildinstall | 1 + 5 files changed, 8 insertions(+) diff --git a/Makefile b/Makefile index 6a50392..6ad23bb 100644 --- a/Makefile +++ b/Makefile @@ -97,6 +97,7 @@ update-repo: iso: ln -sf `pwd` /tmp/qubes-installer revisor --cli --config=conf/qubes-install.conf --model=qubes-x86_64 --install-dvd + rpm --checksig build/work/revisor-install/R1-Beta1/qubes-x86_64/x86_64/os/Packages/*.rpm | grep -v pgp && exit 1 clean: rm -fr rpm/SOURCES/*.bz2 diff --git a/anaconda/scripts/buildinstall b/anaconda/scripts/buildinstall index 3a75d9e..38cf7ba 100755 --- a/anaconda/scripts/buildinstall +++ b/anaconda/scripts/buildinstall @@ -202,6 +202,7 @@ else BASEARCH=`python -c "import rpmUtils.arch; \ print rpmUtils.arch.getBaseArch(myarch=rpmUtils.arch.getCanonArch(skipRpmPlatform = True));"` yumdownloader -c $yumconf anaconda || exit 1 + rpm --checksig anaconda*rpm | grep -v pgp && exit 1 rpm2cpio anaconda*rpm | cpio --quiet -iumd './usr*' rm -f anaconda*rpm popd diff --git a/anaconda/scripts/mk-images b/anaconda/scripts/mk-images index 5979ece..04e42c3 100755 --- a/anaconda/scripts/mk-images +++ b/anaconda/scripts/mk-images @@ -1077,6 +1077,7 @@ for KERNELARCH in $arches; do yumdownloader -c $yumconf --archlist=$KERNELARCH $kpackage kpackage="$kpackage.rpm" + rpm --checksig $kpackage.rpm | grep -v pgp && exit 1 if [ ! -f "$kpackage" ]; then echo "kernel ($kernelvers) doesn't exist for $KERNELARCH. skipping" continue @@ -1101,12 +1102,14 @@ for KERNELARCH in $arches; do # expand out any available firmware too for p in $(repoquery -c $yumconf '*firmware*') ; do yumdownloader -c $yumconf $p + rpm --checksig *firmware*.rpm | grep -v pgp && exit 1 rpm2cpio *firmware*.rpm | (cd $KERNELROOT; cpio --quiet -iumd) rm -f *firmware*.rpm done # and get XEN Hypervisor for p in $(repoquery -c $yumconf 'xen-hypervisor') ; do yumdownloader -c $yumconf $p + rpm --checksig xen-hypervisor*.rpm | grep -v pgp && exit 1 rpm2cpio xen-hypervisor*.rpm | (cd $KERNELROOT; cpio --quiet -iumd) rm -f xen-hypervisor*.rpm done diff --git a/anaconda/scripts/mk-images.efi b/anaconda/scripts/mk-images.efi index 2c9ce0f..d672f49 100644 --- a/anaconda/scripts/mk-images.efi +++ b/anaconda/scripts/mk-images.efi @@ -169,6 +169,7 @@ prepareEfiTree() { ydcmd="yumdownloader -c $yumconf $grubpkg" echo "(grubpkg) $ydcmd" $ydcmd + rpm --checksig $grubpkg.rpm | grep -v pgp && exit 1 rpm2cpio $grubpkg.rpm | (cd $KERNELROOT; cpio --quiet -iumd) cp -av $KERNELROOT/boot/efi/EFI/redhat/grub.efi $MBD_BOOTTREE_TMP/EFI/BOOT/grub.efi @@ -195,6 +196,7 @@ prepareEfiTree() { ydcmd="yumdownloader -c ${yumconf} ${artpkg}" echo "(artpkg) $ydcmd" $ydcmd + rpm --checksig ${artpkg}.rpm | grep -v pgp && exit 1 rpm2cpio ${artpkg}.rpm | (cd $KERNELROOT; cpio --quiet -iumd) cp -av $KERNELROOT/boot/grub/splash.xpm.gz $MBD_BOOTTREE_TMP/$SPLASHPATH diff --git a/revisor/F13-buildinstall b/revisor/F13-buildinstall index 8bb3bef..b7602e4 100755 --- a/revisor/F13-buildinstall +++ b/revisor/F13-buildinstall @@ -213,6 +213,7 @@ else BASEARCH=`python -c "import rpmUtils.arch; \ print rpmUtils.arch.getBaseArch(myarch=rpmUtils.arch.getCanonArch(skipRpmPlatform = True));"` yumdownloader -c $yumconf anaconda || exit 1 + rpm --checksig anaconda*rpm | grep -v pgp && exit 1 rpm2cpio anaconda*rpm | cpio --quiet -iumd './usr*' rm -f anaconda*rpm popd From 96fc81d2100cc38ba340d2fc509fdcf51e821ae7 Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Thu, 23 Jun 2011 12:21:45 +0200 Subject: [PATCH 03/12] Qubes package list for dom0 Can be used as list for yumdownloader or simple cp. --- yum/qubes-dom0/rpm/packages_list | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 yum/qubes-dom0/rpm/packages_list diff --git a/yum/qubes-dom0/rpm/packages_list b/yum/qubes-dom0/rpm/packages_list new file mode 100644 index 0000000..9f2f238 --- /dev/null +++ b/yum/qubes-dom0/rpm/packages_list @@ -0,0 +1,13 @@ +kernel +qubes-core-dom0 +qubes-core-dom0-vaio-fixes +qubes-gui-dom0 +qubes-manager +qubes-template-fedora-14-x64 +xen +xen-debuginfo +xen-doc +xen-hypervisor +xen-libs +xen-runtime +xen-licenses From c321043e3962b3a234ab3f545a530389f20eff48 Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Thu, 23 Jun 2011 15:02:48 +0200 Subject: [PATCH 04/12] Do not disable qubes_setupdvm at the end of instalation (#216) --- anaconda/installclasses/qubes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/anaconda/installclasses/qubes.py b/anaconda/installclasses/qubes.py index 896b22b..69ad3bb 100644 --- a/anaconda/installclasses/qubes.py +++ b/anaconda/installclasses/qubes.py @@ -91,7 +91,7 @@ class InstallClass(BaseInstallClass): # First disable all the useless services... whitelisted = ['functions', 'killall', 'halt', 'single', 'rsyslog', 'haldaemon', 'messagebus', 'xenstored', 'xend', 'xenconsoled', 'firstboot', - 'qubes_core', 'qubes_netvm'] + 'qubes_core', 'qubes_netvm', 'qubes_setupdvm'] for file in os.listdir(anaconda.rootPath + '/etc/init.d'): if not file in whitelisted: From 12237ad630ee504a431db858c38611812993202d Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Thu, 23 Jun 2011 15:09:10 +0200 Subject: [PATCH 05/12] Fix checking of rpms signature on DVD (#229) --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 6ad23bb..9f730bd 100644 --- a/Makefile +++ b/Makefile @@ -97,7 +97,7 @@ update-repo: iso: ln -sf `pwd` /tmp/qubes-installer revisor --cli --config=conf/qubes-install.conf --model=qubes-x86_64 --install-dvd - rpm --checksig build/work/revisor-install/R1-Beta1/qubes-x86_64/x86_64/os/Packages/*.rpm | grep -v pgp && exit 1 + rpm --checksig build/work/revisor-install/R1-Beta1/qubes-x86_64/x86_64/os/Packages/*.rpm | grep -v pgp && exit 1 || true clean: rm -fr rpm/SOURCES/*.bz2 From 35e7e4de35abf0e905afee8613470536f4bd4036 Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Thu, 23 Jun 2011 17:04:02 +0200 Subject: [PATCH 06/12] Fix root account setup Set password only when provided. In Qubes root account is locked, so no password is provided by user... --- anaconda/users.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/anaconda/users.py b/anaconda/users.py index 1748dfd..117bf29 100644 --- a/anaconda/users.py +++ b/anaconda/users.py @@ -252,10 +252,11 @@ class Users: def setUserPassword(self, username, password, isCrypted, lock, algo=None): user = self.admin.lookupUserByName(username) - if isCrypted: - self.admin.setpassUser(user, password, True) - else: - self.admin.setpassUser(user, cryptPassword(password, algo=algo), True) + if password: + if isCrypted: + self.admin.setpassUser(user, password, True) + else: + self.admin.setpassUser(user, cryptPassword(password, algo=algo), True) if lock: self.admin.lockUser(user) From fd08adaf557eff4fce5deef5a60d56d77a2bb121 Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Thu, 23 Jun 2011 17:12:14 +0200 Subject: [PATCH 07/12] Do not create two /boot (#184) /boot will be automatically added to partitions list when required (in this case: when / is on LVM). No need for explicit adding it. --- anaconda/installclass.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/anaconda/installclass.py b/anaconda/installclass.py index bcf03e4..b6e784d 100644 --- a/anaconda/installclass.py +++ b/anaconda/installclass.py @@ -176,9 +176,7 @@ class BaseInstallClass(object): return AnacondaBackend def setDefaultPartitioning(self, storage, platform): - autorequests = [PartSpec(mountpoint="/boot", fstype=storage.defaultBootFSType, - size=512, maxSize=2*1024, grow=False, asVol=False), - PartSpec(mountpoint="/", fstype=storage.defaultFSType, + autorequests = [PartSpec(mountpoint="/", fstype=storage.defaultFSType, size=1024, grow=True, asVol=True, requiredSpace=50*1024)] bootreq = platform.setDefaultPartitioning() From 6527d73a6c2d1e917ebeb921ffe0370c2a675ee2 Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Thu, 23 Jun 2011 23:33:59 +0200 Subject: [PATCH 08/12] Include logo in plymouth theme --- qubes-logos/plymouth/qubes/logo.png | Bin 0 -> 20745 bytes qubes-logos/plymouth/qubes/qubes.script | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 qubes-logos/plymouth/qubes/logo.png diff --git a/qubes-logos/plymouth/qubes/logo.png b/qubes-logos/plymouth/qubes/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..996640c5de057ec46666035d11f0663a6e2f3570 GIT binary patch literal 20745 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 M07*qoM6N<$f)aqX Date: Thu, 23 Jun 2011 23:36:12 +0200 Subject: [PATCH 09/12] Fix package instalation order (plymouth before qubes-logos) --- qubes-logos/qubes-logos.spec | 2 ++ 1 file changed, 2 insertions(+) diff --git a/qubes-logos/qubes-logos.spec b/qubes-logos/qubes-logos.spec index 0b28eea..95d5dea 100644 --- a/qubes-logos/qubes-logos.spec +++ b/qubes-logos/qubes-logos.spec @@ -18,6 +18,8 @@ Conflicts: redhat-artwork <= 5.0.5 # For _kde4_appsdir macro: BuildRequires: kde-filesystem Requires: plymouth-plugin-script +# For plymouth-set-default-theme +Requires: plymouth From fe6bdefd7a7971f62d71b2c5592986df22453096 Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Thu, 23 Jun 2011 23:37:27 +0200 Subject: [PATCH 10/12] Set 'Next' as default button in anaconda (#219) --- anaconda/gui.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/anaconda/gui.py b/anaconda/gui.py index 6673888..7a8eee1 100755 --- a/anaconda/gui.py +++ b/anaconda/gui.py @@ -1432,7 +1432,8 @@ class InstallControlWindow: if ics.getGrabNext(): self.mainxml.get_widget("nextButton").grab_focus() - self.mainxml.get_widget("nextButton").set_flags(gtk.HAS_DEFAULT) + self.mainxml.get_widget("nextButton").set_flags(gtk.CAN_DEFAULT) + self.mainxml.get_widget("nextButton").grab_default() def __init__ (self, anaconda): self.reloadRcQueued = 0 From 4111aa2f47de72231b8ce65ea9b39d0a32c4595e Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Thu, 23 Jun 2011 23:38:33 +0200 Subject: [PATCH 11/12] Remove part of network packages from dom0 (#170) This is only the first aproximation of desired state. --- conf/qubes-kickstart.cfg | 2 -- 1 file changed, 2 deletions(-) diff --git a/conf/qubes-kickstart.cfg b/conf/qubes-kickstart.cfg index e7f146a..645fad3 100644 --- a/conf/qubes-kickstart.cfg +++ b/conf/qubes-kickstart.cfg @@ -11,7 +11,6 @@ dracut-* # X and drivers @base-x @fonts -@hardware-support # Desktop Packages @kde-desktop --nodefaults -kde* @@ -23,7 +22,6 @@ qubes-core-dom0 qubes-gui-dom0 qubes-manager qubes-template-fedora-14-x64 -knetworkmanager -smolt-firstboot -smolt # Keep dap off the install media, makes Eng & Sci show up From c61fc09716b1dd97c2d03ea7a5ee0683fe2a48fa Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Sun, 26 Jun 2011 23:14:36 +0200 Subject: [PATCH 12/12] Make 'Enter' accepts LUKS passphrase (#219) --- anaconda/gui.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/anaconda/gui.py b/anaconda/gui.py index 7a8eee1..2572ec9 100755 --- a/anaconda/gui.py +++ b/anaconda/gui.py @@ -604,6 +604,8 @@ class InstallKeyWindow: class luksPassphraseWindow: def __init__(self, passphrase=None, preexist = False, parent = None): + def ok(*args): + self.win.response(gtk.RESPONSE_OK) luksxml = gtk.glade.XML(findGladeFile("lukspassphrase.glade"), domain="anaconda", root="luksPassphraseDialog") @@ -637,6 +639,7 @@ class luksPassphraseWindow: if parent: self.win.set_transient_for(parent) + self.confirmEntry.connect('activate', ok) addFrame(self.win) def run(self):