1
0
forked from pool/boinc-client
OBS User unknown 2008-10-11 22:54:17 +00:00 committed by Git OBS Bridge
commit 2535b7b0de
16 changed files with 1683 additions and 0 deletions

23
.gitattributes vendored Normal file
View File

@ -0,0 +1,23 @@
## Default LFS
*.7z filter=lfs diff=lfs merge=lfs -text
*.bsp filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.gem filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.jar filter=lfs diff=lfs merge=lfs -text
*.lz filter=lfs diff=lfs merge=lfs -text
*.lzma filter=lfs diff=lfs merge=lfs -text
*.obscpio filter=lfs diff=lfs merge=lfs -text
*.oxt filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.rpm filter=lfs diff=lfs merge=lfs -text
*.tbz filter=lfs diff=lfs merge=lfs -text
*.tbz2 filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.txz filter=lfs diff=lfs merge=lfs -text
*.whl filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.osc

937
bnc-431510.patch Normal file
View File

@ -0,0 +1,937 @@
diff -Naur boinc-6.2.18/client/app_stats_mac.C boinc-6.2.18-mp/client/app_stats_mac.C
--- boinc-6.2.18/client/app_stats_mac.C 2008-08-25 22:29:18.000000000 +0200
+++ boinc-6.2.18-mp/client/app_stats_mac.C 1970-01-01 01:00:00.000000000 +0100
@@ -1,715 +0,0 @@
-// Berkeley Open Infrastructure for Network Computing
-// http://boinc.berkeley.edu
-// Copyright (C) 2006 University of California
-//
-// This is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation;
-// either version 2.1 of the License, or (at your option) any later version.
-//
-// This software is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// See the GNU Lesser General Public License for more details.
-//
-// To view the GNU Lesser General Public License visit
-// http://www.gnu.org/copyleft/lesser.html
-// or write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-// This file is adapted from code originally supplied by Apple Computer, Inc.
-// The Berkeley Open Infrastructure for Network Computing project has modified
-// the original code and made additions as of September 22, 2006. The original
-// Apple Public Source License statement appears below:
-
-/*
- * Copyright (c) 2002-2004 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- *
- * The contents of this file constitute Original Code as defined in and
- * are subject to the Apple Public Source License Version 1.1 (the
- * "License"). You may not use this file except in compliance with the
- * License. Please obtain a copy of the License at
- * http://www.apple.com/publicsource and read it before using this file.
- *
- * This Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
- * License for the specific language governing rights and limitations
- * under the License.
- *
- * @APPLE_LICENSE_HEADER_END@
- */
-
-// app_stats_mac.C
-//
-
-// #define _DEBUG 1
-
-// Put a safety limit on recursion
-#define MAX_DESCENDANT_LEVEL 4
-
-// Totals for non_BOINC processes are not useful because most OSs don't
-// move idle processes out of RAM, so physical memory is always full
-#define GET_NON_BOINC_INFO 0
-
-// We don't need swap space info because
-// http://developer.apple.com/documentation/Performance/Conceptual/ManagingMemory/Articles/AboutMemory.html says:
-// Unlike most UNIX-based operating systems, Mac OS X does not use a
-// preallocated swap partition for virtual memory. Instead, it uses all
-// of the available space on the machineÕs boot partition.
-// However, the associated overhead is not significant if we are examining
-// only BOINC descendant processes.
-#define GET_SWAP_SIZE 1
-
-// The overhead for getting CPU times is not significant if we are
-// examining only BOINC descendant processes.
-#define GET_CPU_TIMES 1
-
-
-#include <cerrno>
-#include <sys/types.h>
-#include <mach/shared_memory_server.h>
-#include <mach/mach.h>
-#include <mach/mach_error.h>
-#include <sys/sysctl.h>
-
-#include "procinfo.h"
-
-using std::vector;
-
-static int get_boinc_proc_info(int my_pid, int boinc_pid);
-static int build_proc_list (vector<PROCINFO>& pi, int boinc_pid);
-static void output_child_totals(PROCINFO& pinfo);
-static boolean_t appstats_task_update(task_t a_task, vector<PROCINFO>& piv);
-static void find_all_descendants(vector<PROCINFO>& piv, int pid, int rlvl);
-static void add_child_totals(PROCINFO& pi, vector<PROCINFO>& piv, int pid, int rlvl);
-//static void add_others(PROCINFO&, std::vector<PROCINFO>&);
-static void sig_pipe(int signo);
-
-#ifdef _DEBUG
-static void print_procinfo(PROCINFO& pinfo);
-static void vm_size_render(unsigned long long a_size);
-#endif
-
-// BOINC helper application to get info about each of the BOINC Client's
-// child processes (including all its descendants) and also totals for
-// all other processes.
-// On the Mac, much of this information is accessible only by the super-user,
-// so this helper application must be run setuid root.
-
-int main(int argc, char** argv) {
- int boinc_pid, my_pid;
- int retval;
- char buf[256];
-
- if (geteuid() != 0) // This must be run setuid root
- return EACCES;
-
- my_pid = getpid();
- boinc_pid = getppid(); // Assumes we were called by BOINC client
-
- if (argc == 2)
- boinc_pid = atoi(argv[1]); // Pass in any desired valid pid for testing
-
- if (signal(SIGPIPE, sig_pipe) == SIG_ERR) {
- fprintf(stderr, "signal error");
- return 0;
- }
-
- setbuf(stdin, 0);
- setbuf(stdout, 0);
-
- while (1) {
- if (fgets(buf, sizeof(buf), stdin) == NULL)
- return 0;
-
- if (feof(stdin))
- return 0;
-
- retval = get_boinc_proc_info(my_pid, boinc_pid);
- }
-
- return 0;
-}
-
-static int get_boinc_proc_info(int my_pid, int boinc_pid) {
- int retval;
- vector<PROCINFO> piv;
- PROCINFO child_total;
- unsigned int i;
-
-
- retval = build_proc_list(piv, boinc_pid);
- if (retval)
- return retval;
-
- for (i=0; i<piv.size(); i++) {
- PROCINFO& p = piv[i];
- if (p.parentid == boinc_pid) {
- if (p.id == my_pid)
- continue;
-
- child_total = p;
- p.is_boinc_app = true;
-#ifdef _DEBUG
- printf("\n\nSumming info for process %d and its children:\n", child_total.id);
- print_procinfo(child_total);
-#endif
- // look for child processes
- add_child_totals(child_total, piv, p.id, 0);
-#ifdef _DEBUG
- printf("Totals for process %d and its children:\n", child_total.id);
-#endif
- output_child_totals(child_total);
- }
- }
-
- memset(&child_total, 0, sizeof(child_total));
-#if 0
-#ifdef _DEBUG
- printf("\n\nSumming info for all other processes\n");
-#endif
- add_others(child_total, piv);
-#endif
- output_child_totals(child_total); // zero pid signals end of data
-
- return 0;
-}
-
-
-static void output_child_totals(PROCINFO& pinfo) {
- printf("%d %d %.0lf %.0lf %lu %lf %lf\n",
- pinfo.id, pinfo.parentid, pinfo.working_set_size, pinfo.swap_size,
- pinfo.page_fault_count, pinfo.user_time, pinfo.kernel_time);
-// fflush(stdout);
-}
-
-static int build_proc_list (vector<PROCINFO>& pi, int boinc_pid) {
- boolean_t retval = FALSE;
- kern_return_t error;
- mach_port_t appstats_port;
- processor_set_t *psets, pset;
- task_t *tasks;
- unsigned i, j, pcnt, tcnt;
- PROCINFO pinfo;
- int pid, mib[4];
- struct kinfo_proc kinfo;
- size_t kinfosize;
-
- appstats_port = mach_host_self();
-
- // First, get a list of all tasks / processes
-
- error = host_processor_sets(appstats_port, &psets, &pcnt);
- if (error != KERN_SUCCESS) {
- fprintf(stderr,
- "Error in host_processor_sets(): %s",
- mach_error_string(error));
- retval = TRUE;
- goto RETURN;
- }
-
- for (i = 0; i < pcnt; i++) {
- if (retval)
- break;
-
- error = host_processor_set_priv(appstats_port, psets[i], &pset);
- if (error != KERN_SUCCESS) {
- fprintf(stderr,
- "Error in host_processor_set_priv(): %s",
- mach_error_string(error));
- retval = TRUE;
- break;
- }
-
- error = processor_set_tasks(pset, &tasks, &tcnt);
- if (error != KERN_SUCCESS) {
- fprintf(stderr,
- "Error in processor_set_tasks(): %s",
- mach_error_string(error));
- retval = TRUE;
- break;
- }
-
- for (j = 0; j < tcnt; j++) {
- if (retval)
- break;
-
- memset(&pinfo, 0, sizeof(PROCINFO));
-
- /* Get pid for this task. */
- error = pid_for_task(tasks[j], &pid);
- if (error != KERN_SUCCESS) {
- /* Not a process, or the process is gone. */
- continue;
- }
-
- // Get parent pid for each process
- /* Get kinfo structure for this task. */
- kinfosize = sizeof(struct kinfo_proc);
- mib[0] = CTL_KERN;
- mib[1] = KERN_PROC;
- mib[2] = KERN_PROC_PID;
- mib[3] = pid;
-
- if (sysctl(mib, 4, &kinfo, &kinfosize, NULL, 0) == -1) {
- fprintf(stderr,
- "%s(): Error in sysctl(): %s", __FUNCTION__,
- strerror(errno));
- retval = TRUE;
- break;
- }
-
- if (kinfo.kp_proc.p_stat == 0) {
- /* Zombie process. */
- continue;
- }
-
- pinfo.id = pid;
- pinfo.parentid = kinfo.kp_eproc.e_ppid;
-
- pi.push_back(pinfo);
- }
- }
-
-#if ! GET_NON_BOINC_INFO
- // Next, find all BOINC's decendants and mark them for further study
- if (! retval)
- find_all_descendants(pi, boinc_pid, 0);
-#endif
-
- // Now get the process information for each descendant
- for (i = 0; i < pcnt; i++) {
- for (j = 0; j < tcnt; j++) {
- if (! retval)
- if (appstats_task_update(tasks[j], pi)) {
- retval = TRUE;
- goto RETURN;
- }
-
- /* Delete task port if it isn't our own. */
- if (tasks[j] != mach_task_self()) {
- mach_port_deallocate(mach_task_self(),
- tasks[j]);
- }
- }
-
- error = vm_deallocate((vm_map_t)mach_task_self(),
- (vm_address_t)tasks, tcnt * sizeof(task_t));
- if (error != KERN_SUCCESS) {
- if (!retval)
- fprintf(stderr,
- "Error in vm_deallocate(): %s",
- mach_error_string(error));
- retval = TRUE;
- goto RETURN;
- }
- if ((error = mach_port_deallocate(mach_task_self(),
- pset)) != KERN_SUCCESS
- || (error = mach_port_deallocate(mach_task_self(),
- psets[i])) != KERN_SUCCESS) {
- if (!retval)
- fprintf(stderr,
- "Error in mach_port_deallocate(): %s",
- mach_error_string(error));
- retval = TRUE;
- goto RETURN;
- }
- }
-
- error = vm_deallocate((vm_map_t)mach_task_self(),
- (vm_address_t)psets, pcnt * sizeof(processor_set_t));
- if (error != KERN_SUCCESS) {
- if (!retval)
- fprintf(stderr,
- "Error in vm_deallocate(): %s",
- mach_error_string(error));
- retval = TRUE;
- goto RETURN;
- }
-
- RETURN:
- return retval;
-
-}
-
-/* Update statistics for task a_task. */
-static boolean_t appstats_task_update(task_t a_task, vector<PROCINFO>& piv)
-{
- boolean_t retval;
- kern_return_t error;
- mach_msg_type_number_t count;
- task_basic_info_data_t ti;
- vm_address_t address;
- mach_port_t object_name;
- vm_region_top_info_data_t info;
- vm_size_t size;
- thread_array_t thread_table;
- unsigned int table_size;
- thread_basic_info_t thi;
- thread_basic_info_data_t thi_data;
- unsigned i;
- task_events_info_data_t events;
- vm_size_t vsize, rsize;
- PROCINFO *pinfo;
- int pid;
-
- /* Get pid for this task. */
- error = pid_for_task(a_task, &pid);
- if (error != KERN_SUCCESS) {
- /* Not a process, or the process is gone. */
- retval = FALSE;
- goto GONE;
- }
-
- for (i=0; i<piv.size(); i++) {
- pinfo = &piv[i];
- if (pinfo->id == pid)
- break;
- }
-
- if (pinfo->id != pid) {
- fprintf(stderr, "pid %d missing from list\n", pid);
- retval = FALSE;
- goto RETURN;
- }
-
-#if ! GET_NON_BOINC_INFO
- if (!pinfo->is_boinc_app) {
- retval = FALSE;
- goto RETURN;
- }
-#endif
- /*
- * Get task_info, which is used for memory usage and CPU usage
- * statistics.
- */
- count = TASK_BASIC_INFO_COUNT;
- error = task_info(a_task, TASK_BASIC_INFO, (task_info_t)&ti, &count);
- if (error != KERN_SUCCESS) {
- retval = FALSE;
- goto GONE;
- }
-
- /*
- * Get memory usage statistics.
- */
-
- /*
- * Set rsize and vsize; they require no calculation. (Well, actually,
- * we adjust vsize if traversing memory objects to not include the
- * globally shared text and data regions).
- */
- rsize = ti.resident_size;
-#if GET_SWAP_SIZE
- vsize = ti.virtual_size;
- /*
- * Iterate through the VM regions of the process and determine
- * the amount of memory of various types it has mapped.
- */
- for (address = 0; ; address += size) {
- /* Get memory region. */
- count = VM_REGION_TOP_INFO_COUNT;
- if (vm_region(a_task, &address, &size,
- VM_REGION_TOP_INFO, (vm_region_info_t)&info, &count,
- &object_name) != KERN_SUCCESS) {
- /* No more memory regions. */
- break;
- }
-
- if (address >= GLOBAL_SHARED_TEXT_SEGMENT
- && address < (GLOBAL_SHARED_DATA_SEGMENT
- + SHARED_DATA_REGION_SIZE)) {
- /* This region is private shared. */
-
- /*
- * Check if this process has the globally shared
- * text and data regions mapped in. If so, adjust
- * virtual memory size and exit loop.
- */
- if (info.share_mode == SM_EMPTY) {
- vm_region_basic_info_data_64_t b_info;
-
- count = VM_REGION_BASIC_INFO_COUNT_64;
- if (vm_region_64(a_task, &address,
- &size, VM_REGION_BASIC_INFO,
- (vm_region_info_t)&b_info, &count,
- &object_name) != KERN_SUCCESS) {
- break;
- }
-
- if (b_info.reserved) {
- vsize -= (SHARED_TEXT_REGION_SIZE + SHARED_DATA_REGION_SIZE);
- break;
- }
- }
- }
- }
-#else
- vsize = 0;
-#endif // GET_SWAP_SIZE
- pinfo->working_set_size = rsize;
- pinfo->swap_size = vsize;
-
- /*
- * Get CPU usage statistics.
- */
-
- pinfo->user_time = (double)ti.user_time.seconds + (((double)ti.user_time.microseconds)/1000000.);
- pinfo->kernel_time = (double)ti.system_time.seconds + (((double)ti.system_time.microseconds)/1000000.);
-
- /* Get number of threads. */
- error = task_threads(a_task, &thread_table, &table_size);
- if (error != KERN_SUCCESS) {
- retval = FALSE;
- goto RETURN;
- }
-
-#if GET_CPU_TIMES
- /* Iterate through threads and collect usage stats. */
- thi = &thi_data;
- for (i = 0; i < table_size; i++) {
- count = THREAD_BASIC_INFO_COUNT;
- if (thread_info(thread_table[i], THREAD_BASIC_INFO,
- (thread_info_t)thi, &count) == KERN_SUCCESS) {
- if ((thi->flags & TH_FLAGS_IDLE) == 0) {
- pinfo->user_time += (double)thi->user_time.seconds + (((double)thi->user_time.microseconds)/1000000.);
- pinfo->kernel_time += (double)thi->system_time.seconds + (((double)thi->system_time.microseconds)/1000000.);
- }
- }
- if (a_task != mach_task_self()) {
- if ((error = mach_port_deallocate(mach_task_self(),
- thread_table[i])) != KERN_SUCCESS) {
- fprintf(stderr,
- "Error in mach_port_deallocate(): %s",
- mach_error_string(error));
- retval = TRUE;
- goto RETURN;
- }
- }
- }
- if ((error = vm_deallocate(mach_task_self(), (vm_offset_t)thread_table,
- table_size * sizeof(thread_array_t)) != KERN_SUCCESS)) {
- fprintf(stderr,
- "Error in vm_deallocate(): %s",
- mach_error_string(error));
- retval = TRUE;
- goto RETURN;
- }
-#endif GET_CPU_TIMES
-
- /*
- * Get event counters.
- */
-
- count = TASK_EVENTS_INFO_COUNT;
- if (task_info(a_task, TASK_EVENTS_INFO,
- (task_info_t)&events, &count) != KERN_SUCCESS) {
- /* Error. */
- retval = FALSE;
- goto RETURN;
- } else {
- pinfo->page_fault_count = events.pageins;
- }
-
- retval = FALSE;
- RETURN:
- GONE:
-
- return retval;
-}
-
-// Scan the process table marking all the decendants of the parent
-// process. Loop thru entire table as the entries aren't in order.
-// Recurse at most 5 times to get additional child processes.
-//
-static void find_all_descendants(vector<PROCINFO>& piv, int pid, int rlvl) {
- unsigned int i;
-
- if (rlvl > MAX_DESCENDANT_LEVEL) {
- return;
- }
- for (i=0; i<piv.size(); i++) {
- PROCINFO& p = piv[i];
- if (p.parentid == pid) {
- p.is_boinc_app = true;
- // look for child process of this one
- find_all_descendants(piv, p.id, rlvl+1); // recursion - woo hoo!
- }
- }
-}
-
-// Scan the process table adding in CPU time and mem usage. Loop
-// thru entire table as the entries aren't in order. Recurse at
-// most 4 times to get additional child processes
-//
-static void add_child_totals(PROCINFO& pi, vector<PROCINFO>& piv, int pid, int rlvl) {
- unsigned int i;
-
- if (rlvl > (MAX_DESCENDANT_LEVEL - 1)) {
- return;
- }
- for (i=0; i<piv.size(); i++) {
- PROCINFO& p = piv[i];
- if (p.parentid == pid) {
- pi.kernel_time += p.kernel_time;
- pi.user_time += p.user_time;
- pi.swap_size += p.swap_size;
- pi.working_set_size += p.working_set_size;
- pi.page_fault_count += p.page_fault_count;
- p.is_boinc_app = true;
-#ifdef _DEBUG
- print_procinfo(p);
-#endif
- // look for child process of this one
- add_child_totals(pi, piv, p.id, rlvl+1); // recursion - woo hoo!
- }
- }
-}
-
-#if 0
-static void add_others(PROCINFO& pi, vector<PROCINFO>& piv) {
- unsigned int i;
-
- memset(&pi, 0, sizeof(pi));
- for (i=0; i<piv.size(); i++) {
- PROCINFO& p = piv[i];
- if (!p.is_boinc_app) {
- pi.kernel_time += p.kernel_time;
- pi.user_time += p.user_time;
- pi.swap_size += p.swap_size;
- pi.working_set_size += p.working_set_size;
- pi.page_fault_count += p.page_fault_count;
- p.is_boinc_app = true;
-#ifdef _DEBUG
- print_procinfo(p);
-#endif
- }
- }
-}
-#endif
-
-static void sig_pipe(int signo)
-{
- exit(1);
-}
-
-#ifdef _DEBUG
-static void print_procinfo(PROCINFO& pinfo) {
- unsigned long long rsize, vsize;
-
- rsize = (unsigned long long)pinfo.working_set_size;
- vsize = (unsigned long long)pinfo.swap_size;
- printf("pid=%d, ppid=%d, rm=%llu=", pinfo.id, pinfo.parentid, rsize);
- vm_size_render(rsize);
- printf("=, vm=%llu=", vsize);
- vm_size_render(vsize);
- printf(", pageins=%lu, usertime=%lf, systime=%lf\n", pinfo.page_fault_count, pinfo.user_time, pinfo.kernel_time);
-}
-
-/*
- * Render a memory size in units of B, K, M, or G, depending on the value.
- *
- * a_size is ULL, since there are places where VM sizes are capable of
- * overflowing 32 bits, particularly when VM stats are multiplied by the
- * pagesize.
- */
-static void vm_size_render(unsigned long long a_size)
-{
- if (a_size < 1024) {
- /* 1023B. */
- printf("%4lluB", a_size);
- } else if (a_size < (1024ULL * 1024ULL)) {
- /* K. */
- if (a_size < 10ULL * 1024ULL) {
- /* 9.99K */
- printf("%1.2fK",
- ((double)a_size) / 1024);
- } else if (a_size < 100ULL * 1024ULL) {
- /* 99.9K */
- printf("%2.1fK",
- ((double)a_size) / 1024);
- } else {
- /* 1023K */
- printf("%4lluK",
- a_size / 1024ULL);
- }
- } else if (a_size < (1024ULL * 1024ULL * 1024ULL)) {
- /* M. */
- if (a_size < 10ULL * 1024ULL * 1024ULL) {
- /* 9.99M */
- printf("%1.2fM",
- ((double)a_size) / (1024 * 1024));
- } else if (a_size < 100ULL * 1024ULL * 1024ULL) {
- /* 99.9M */
- printf("%2.1fM",
- ((double)a_size) / (1024 * 1024));
- } else {
- /* 1023M */
- printf("%4lluM",
- a_size / (1024ULL * 1024ULL));
- }
- } else if (a_size < (1024ULL * 1024ULL * 1024ULL * 1024ULL)) {
- /* G. */
- if (a_size < 10ULL * 1024ULL * 1024ULL * 1024ULL) {
- /* 9.99G. */
- printf("%1.2fG",
- ((double)a_size) / (1024 * 1024 * 1024));
- } else if (a_size < 100ULL * 1024ULL * 1024ULL * 1024ULL) {
- /* 99.9G. */
- printf("%2.1fG",
- ((double)a_size) / (1024 * 1024 * 1024));
- } else {
- /* 1023G */
- printf("%4lluG",
- a_size / (1024ULL * 1024ULL * 1024ULL));
- }
- } else if (a_size < (1024ULL * 1024ULL * 1024ULL * 1024ULL)) {
- /* T. */
- if (a_size < 10ULL * 1024ULL * 1024ULL * 1024ULL * 1024ULL) {
- /* 9.99T. */
- printf("%1.2fT",
- ((double)a_size) /
- (1024ULL * 1024ULL * 1024ULL * 1024ULL));
- } else if (a_size < (100ULL * 1024ULL * 1024ULL * 1024ULL
- * 1024ULL)) {
- /* 99.9T. */
- printf("%2.1fT",
- ((double)a_size) /
- (1024ULL * 1024ULL * 1024ULL * 1024ULL));
- } else {
- /* 1023T */
- printf("%4lluT",
- a_size /
- (1024ULL * 1024ULL * 1024ULL * 1024ULL));
- }
- } else {
- /* P. */
- if (a_size < (10ULL * 1024ULL * 1024ULL * 1024ULL * 1024ULL
- * 1024ULL)) {
- /* 9.99P. */
- printf("%1.2fP",
- ((double)a_size) /
- (1024ULL * 1024ULL * 1024ULL * 1024ULL
- * 1024ULL));
- } else if (a_size < (100ULL * 1024ULL * 1024ULL * 1024ULL
- * 1024ULL)) {
- /* 99.9P. */
- printf("%2.1fP",
- ((double)a_size) /
- (1024ULL * 1024ULL * 1024ULL * 1024ULL
- * 1024ULL));
- } else {
- /* 1023P */
- printf("%4lluP",
- a_size /
- (1024ULL * 1024ULL * 1024ULL * 1024ULL
- * 1024ULL));
- }
- }
-}
-#endif // _DEBUG
diff -Naur boinc-6.2.18/lib/mac/dyld_gdb.h boinc-6.2.18-mp/lib/mac/dyld_gdb.h
--- boinc-6.2.18/lib/mac/dyld_gdb.h 2008-08-25 22:27:58.000000000 +0200
+++ boinc-6.2.18-mp/lib/mac/dyld_gdb.h 1970-01-01 01:00:00.000000000 +0100
@@ -1,214 +0,0 @@
-// Berkeley Open Infrastructure for Network Computing
-// http://boinc.berkeley.edu
-// Copyright (C) 2005 University of California
-//
-// This is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation;
-// either version 2.1 of the License, or (at your option) any later version.
-//
-// This software is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// See the GNU Lesser General Public License for more details.
-//
-// To view the GNU Lesser General Public License visit
-// http://www.gnu.org/copyleft/lesser.html
-// or write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*
- * dyld_gdb.h
- *
- */
-
-/* This is part of a backtrace generator for boinc project applications.
-*
-* Adapted from Apple Developer Technical Support Sample Code QCrashReport
-*
-* This code handles Mac OS X 10.3.x through 10.4.9. It may require some
-* adjustment for future OS versions; see the discussion of _sigtramp and
-* PowerPC Signal Stack Frames in file QBacktrace.c.
-*
-* For useful tips on using backtrace information, see Apple Tech Note 2123:
-* http://developer.apple.com/technotes/tn2004/tn2123.html#SECNOSYMBOLS
-*
-* To convert addresses to correct symbols, use the atos command-line tool:
-* atos -o path/to/executable/with/symbols address
-* Note: if address 1a23 is hex, use 0x1a23.
-*
-* To demangle mangled C++ symbols, use the c++filt command-line tool.
-* You may need to prefix C++ symbols with an additonal underscore before
-* passing them to c++filt (so they begin with two underscore characters).
-*
-* A very useful shell script to add symbols to a crash dump can be found at:
-* http://developer.apple.com/tools/xcode/symbolizingcrashdumps.html
-* Pipe the output of the shell script through c++filt to demangle C++ symbols.
-*/
-
-/*
- * Copyright (c) 2003 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- *
- * This file contains Original Code and/or Modifications of Original Code
- * as defined in and that are subject to the Apple Public Source License
- * Version 2.0 (the 'License'). You may not use this file except in
- * compliance with the License. Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this
- * file.
- *
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
- * Please see the License for the specific language governing rights and
- * limitations under the License.
- *
- * @APPLE_LICENSE_HEADER_END@
- */
-#ifndef _DYLD_GDB_
-#define _DYLD_GDB_
-/*
- * This file describes the interface between gdb and dyld created for
- * MacOS X GM. Prior to MacOS X GM gdb used the dyld_debug interfaces
- * described in <mach-o/dyld_debug.h>.
- */
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-#define OLD_GDB_DYLD_INTERFACE __ppc__ || __i386__
-
-#if OLD_GDB_DYLD_INTERFACE
-/*
- * gdb_dyld_version is the version of gdb interface that dyld is currently
- * exporting. For the interface described in this header file gdb_dyld_version
- * is 2. As the gdb/dyld interface changes this number will be incremented and
- * comments will be added as to what are the are changes for the various
- * versions.
- */
-extern unsigned int gdb_dyld_version;
-
-/*
- * gdb_dyld_state_changed is the internal dyld routine called by dyld to notify
- * gdb that the state of the data structures has changed. gdb is expected to
- * put a break point on this routine and re-read the internal dyld data
- * structures below when this break point is hit.
- */
-extern void gdb_dyld_state_changed(void);
-
-/*
- * gdb looks directly at parts of two of dyld's internal data structures. The
- * list of object file images and the list of library images. The parts of
- * these structures that gdb looks at will not change unless the value of
- * gdb_dyld_version changes. The size of these structures and the other fields
- * that gdb does not look at may change.
- *
- * struct object_images {
- * struct object_image images[NOBJECT_IMAGES];
- * unsigned long nimages;
- * struct object_images *next_images;
- * ...
- * };
- *
- * struct library_images {
- * struct library_image images[NLIBRARY_IMAGES];
- * unsigned long nimages;
- * struct library_images *next_images;
- * ...
- * };
- *
- * Both the object_image structure and the library_image structure
- * start with a structure containing the following fields:
- *
- * struct image {
- * char *physical_name; physical image name (file name)
- * unsigned long vmaddr_slide; the slide from the staticly linked address
- * struct mach_header *mh; address of the mach header of the image
- * unsigned long valid; TRUE if this is struct is valid
- * char *name; image name for reporting errors
- * ...
- * };
- *
- * In gdb_dyld_version 1 the first field was "name". In gdb_dyld_version 2 the
- * first field was changed to "physical_name" and a new fifth field "name" was
- * added. These two fields are set to the same values except in the case of
- * zero-link. In zero-link the NSLinkModule() option
- * NSLINKMODULE_OPTION_TRAILING_PHYS_NAME is used and then the physical_name is
- * the file name of the module zero-link loaded that is part of the logical
- * image "name".
- */
-
-/* object_images is the global object_images structure */
-
-/* the number of gdb_object_image structures present per bucket */
-extern unsigned int gdb_nobject_images;
-
-/* the size of each gdb_object_image structure */
-extern unsigned int gdb_object_image_size;
-
-/* library_images is the global library_images structure */
-
-/* the number of gdb_library_image structures present per bucket */
-extern unsigned int gdb_nlibrary_images;
-
-/* the size of each gdb_library_image structure */
-extern unsigned int gdb_library_image_size;
-
-#endif /* OLD_GDB_DYLD_INTERFACE */
-
-
-/*
- * Beginning in Mac OS X 10.4, there is a new mechanism for dyld to notify gdb and other about new images.
- *
- *
- */
-
-enum dyld_image_mode { dyld_image_adding=0, dyld_image_removing=1 };
-
-struct dyld_image_info {
- const struct mach_header* imageLoadAddress; /* base address image is mapped into */
- const char* imageFilePath; /* path dyld used to load the image */
- uintptr_t imageFileModDate; /* time_t of image file */
- /* if stat().st_mtime of imageFilePath does not match imageFileModDate, */
- /* then file has been modified since dyld loaded it */
-};
-
-
-typedef void (*dyld_image_notifier)(enum dyld_image_mode mode, uint32_t infoCount, const struct dyld_image_info info[]);
-
-/*
- * gdb looks for the symbol "_dyld_all_image_infos" in dyld. It contains the fields below.
- *
- * For a snap shot of what images are currently loaded, the infoArray fields contain a pointer
- * to an array of all images. If infoArray is NULL, it means it is being modified, come back later.
- *
- * To be notified of changes, gdb sets a break point on the notification field. The function
- * it points to is called by dyld with an array of information about what images have been added
- * (dyld_image_adding) or are about to be removed (dyld_image_removing).
- *
- * The notification is called after infoArray is updated. This means that if gdb attaches to a process
- * and infoArray is NULL, gdb can set a break point on notification and let the proccess continue to
- * run until the break point. Then gdb can inspect the full infoArray.
- */
- struct dyld_all_image_infos {
- uint32_t version; /* == 1 in Mac OS X 10.4 */
- uint32_t infoArrayCount;
- const struct dyld_image_info* infoArray;
- dyld_image_notifier notification;
- bool processDetachedFromSharedRegion;
-};
-extern struct dyld_all_image_infos dyld_all_image_infos;
-
-
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _DYLD_GDB_ */

3
boinc-6.2.18.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:8a58f7ae15461724ac02934f03da58b63a9c24edb6d8999c1691256b2cde04c5
size 28771307

66
boinc-LC_MESSAGES.patch Normal file
View File

@ -0,0 +1,66 @@
--- locale/client/Makefile.am.orig 2008-08-25 22:38:54.000000000 +0200
+++ locale/client/Makefile.am 2008-08-25 22:38:22.000000000 +0200
@@ -0,0 +1,53 @@
+## -*- mode: makefile; tab-width: 4 -*-
+
+include $(top_srcdir)/Makefile.incl
+
+datadir = $(prefix)/share/locale
+
+locale_dirs = \
+ af_ZA \
+ ar \
+ be \
+ bg \
+ ca \
+ cs \
+ cs_CZ \
+ da \
+ de \
+ el \
+ en_US \
+ es \
+ eu \
+ fi \
+ fr \
+ hr \
+ hu \
+ it \
+ ja \
+ ko_KR \
+ lt \
+ lv \
+ nb \
+ nl \
+ pl \
+ pt \
+ pt_BR \
+ ro \
+ ru \
+ sk \
+ sl \
+ sv_SE \
+ tr \
+ uk \
+ zh_CN \
+ zh_TW
+
+install-exec-hook:
+ mydir=$(DESTDIR)$(datadir) ;\
+ for ldir in $(locale_dirs) ; do \
+ $(INSTALL) -d $$mydir/$$ldir/LC_MESSAGES ; \
+ if [ -f "$$ldir/BOINC Manager.mo" ] ; then \
+ $(INSTALL) "$$ldir/BOINC Manager.mo" $$mydir/$$ldir/LC_MESSAGES/"BOINC Manager.mo" ; \
+ fi ;\
+ done
+
--- configure.ac.orig 2008-08-25 22:29:18.000000000 +0200
+++ configure.ac 2008-08-25 23:19:42.000000000 +0200
@@ -670,6 +670,7 @@
doc/Makefile
doc/manpages/Makefile
lib/Makefile
+ locale/client/Makefile
Makefile
py/Boinc/boinc_path_config.py:py/Boinc/boinc_path_config.py.in
py/Boinc/Makefile

11
boinc-client.changes Normal file
View File

@ -0,0 +1,11 @@
-------------------------------------------------------------------
Sat Oct 4 05:44:49 CEST 2008 - mauro@suse.de
- Add bnc-431510.patch to fix bnc#431510.
-------------------------------------------------------------------
Mon Sep 8 22:15:35 CEST 2008 - mauro@suse.de
- initial package for SuSE. boinc 6.2.18 (based on the enzokiel's
opensuse version).

244
boinc-client.spec Normal file
View File

@ -0,0 +1,244 @@
#
# spec file for package boinc-client (Version 6.2.18)
#
# Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
# norootforbuild
Name: boinc-client
Summary: The Berkeley Open Infrastructure for Network Computing (BOINC)
Version: 6.2.18
Release: 1
Url: http://boinc.berkeley.edu/
Source0: boinc-%{version}.tar.bz2
Source1: boinc-icons.tar.bz2
Source2: boinc-logrotate
Source3: boinc-gui.desktop
Source4: boincmgr
Patch0: boinc-docbook2x.patch
Patch1: boinc-LC_MESSAGES.patch
Patch2: boinc-rcscript.patch
Patch3: boinc-sysconfig.patch
Patch4: boinc-subdirs.patch
Patch5: bnc-431510.patch
License: LGPL v2.1 only
Group: Productivity/Clustering/Computing
BuildRequires: libcurl-devel >= 7.15.2 python-mysql update-desktop-files
BuildRequires: Mesa-devel freeglut-devel libopenssl-devel
BuildRequires: gcc-c++ gettext-runtime mysql-devel wxGTK-devel >= 2.8.7
BuildRequires: docbook2x libjpeg-devel libxslt xorg-x11-libXmu-devel
Requires: logrotate
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%description
The Berkeley Open Infrastructure for Network Computing (BOINC) is an
open-source software platform which supports distributed computing,
primarily in the form of "volunteer" computing and "desktop Grid"
computing. It is well suited for problems which are often described as
"trivially parallel".
BOINC is the underlying software used by projects such as SETI@home,
Einstein@Home, ClimatePrediciton.net, the World Community Grid, and
many other distributed computing projects.
Authors:
--------
University of California, Berkeley
Dr. David P. Anderson <davea@ssl.berkeley.edu>
Rom Walton <rwalton@ssl.berkeley.edu>
Charlie Fenton
%package -n boinc-gui-lang
License: LGPL v2.1 only
Summary: The Berkeley Open Infrastructure for Network Computing (BOINC)
Group: Productivity/Clustering/Computing
%description -n boinc-gui-lang
The Berkeley Open Infrastructure for Network Computing (BOINC) is an
open-source software platform which supports distributed computing,
primarily in the form of "volunteer" computing and "desktop Grid"
computing. It is well suited for problems which are often described as
"trivially parallel".
BOINC is the underlying software used by projects such as SETI@home,
Einstein@Home, ClimatePrediciton.net, the World Community Grid, and
many other distributed computing projects.
Authors:
--------
University of California, Berkeley
Dr. David P. Anderson <davea@ssl.berkeley.edu>
Rom Walton <rwalton@ssl.berkeley.edu>
Charlie Fenton
%package -n boinc-gui
License: LGPL v2.1 only
Summary: The Berkeley Open Infrastructure for Network Computing (BOINC)
Group: Productivity/Clustering/Computing
Requires: boinc-client = %{version}-%{release}, boinc-gui-lang = %{version}-%{release}
%description -n boinc-gui
The Berkeley Open Infrastructure for Network Computing (BOINC) is an
open-source software platform which supports distributed computing,
primarily in the form of "volunteer" computing and "desktop Grid"
computing. It is well suited for problems which are often described as
"trivially parallel".
BOINC is the underlying software used by projects such as SETI@home,
Einstein@Home, ClimatePrediciton.net, the World Community Grid, and
many other distributed computing projects.
Authors:
--------
University of California, Berkeley
Dr. David P. Anderson <davea@ssl.berkeley.edu>
Rom Walton <rwalton@ssl.berkeley.edu>
Charlie Fenton
%package devel
License: LGPL v2.1 only
Summary: The Berkeley Open Infrastructure for Network Computing (BOINC)
Group: Productivity/Clustering/Computing
Provides: boinc-client-devel = %{version}
Requires: boinc-client = %{version}-%{release}
%description devel
The Berkeley Open Infrastructure for Network Computing (BOINC) is an
open-source software platform which supports distributed computing,
primarily in the form of "volunteer" computing and "desktop Grid"
computing. It is well suited for problems which are often described as
"trivially parallel".
BOINC is the underlying software used by projects such as SETI@home,
Einstein@Home, ClimatePrediciton.net, the World Community Grid, and
many other distributed computing projects.
Authors:
--------
University of California, Berkeley
Dr. David P. Anderson <davea@ssl.berkeley.edu>
Rom Walton <rwalton@ssl.berkeley.edu>
Charlie Fenton
%prep
rm -rf $RPM_BUILD_ROOT
mkdir $RPM_BUILD_ROOT
%setup -q -n boinc-%{version}
%patch0
%patch1
%patch2
%patch3
%patch4
%patch5 -p1
tar -xvjf %{S:1}
%build
export RPM_OPT_FLAGS="-O3 -funroll-loops -fforce-addr -ffast-math"
export CFLAGS="$RPM_OPT_FLAGS"
./_autosetup
./configure \
--prefix=%{_prefix} \
--libdir=%{_libdir} \
--mandir=%{_mandir} \
--disable-server \
--enable-client \
--enable-unicode
make
%install
make DESTDIR=$RPM_BUILD_ROOT install
# create symlink for boinc_client
ln -s %{_bindir}/boinc_client $RPM_BUILD_ROOT%{_bindir}/boinc
# install logrotate and create symlink to /etc/int.d/boinc-client
install -d -m755 $RPM_BUILD_ROOT%{_sbindir}
ln -s %{_sysconfdir}/init.d/boinc-client $RPM_BUILD_ROOT%{_sbindir}/rcboinc-client
install -D -m644 %{S:2} $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/boinc
# istall desktop-file and icons
install -D -m644 %{S:3} $RPM_BUILD_ROOT%{_datadir}/applications/boinc-gui.desktop
install -D -m644 boinc-gui-128.png $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/128x128/apps/boinc-gui.png
install -D -m644 boinc-gui-64.png $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/64x64/apps/boinc-gui.png
install -D -m644 boinc-gui-48.png $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/48x48/apps/boinc-gui.png
install -D -m644 boinc-gui-32.png $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/32x32/apps/boinc-gui.png
install -D -m644 boinc-gui-22.png $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/22x22/apps/boinc-gui.png
install -D -m644 boinc-gui-16.png $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/16x16/apps/boinc-gui.png
#removing sysconfig entry
rm $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/boinc-client
# install boincmgr
install -D -m755 %{S:4} $RPM_BUILD_ROOT%{_bindir}/boincmgr
%clean
rm -rf $RPM_BUILD_ROOT
%pre
%post
%preun
%stop_on_removal boinc-client
%postun
%restart_on_update boinc-client
%files
%defattr(-,root,root)
%{_bindir}/boinc
%{_bindir}/boinc_client
%{_bindir}/boinc_cmd
%{_bindir}/ca-bundle.crt
%{_bindir}/crypt_prog
%{_bindir}/switcher
%{_sbindir}/*
%config %{_sysconfdir}/init.d/*
%config(noreplace) %{_sysconfdir}/logrotate.d/*
#%{_sysconfdir}/sysconfig/*
%{_mandir}/man*/*
%doc COPYING COPYRIGHT checkin_* INSTALL notes todo TODO_OLD
%files -n boinc-gui-lang
%defattr(-,root,root)
%{_datadir}/locale/*/LC_MESSAGES/*
%{_datadir}/locale/ko_KR
%{_datadir}/locale/ko_KR/LC_MESSAGES
%{_datadir}/locale/sv_SE
%{_datadir}/locale/sv_SE/LC_MESSAGES
%files -n boinc-gui
%defattr(-,root,root)
%{_bindir}/boincmgr
%{_bindir}/boinc_gui
%{_datadir}/applications/*
%{_datadir}/icons/hicolor/*/apps/*
%files devel
%defattr(-,root,root)
%dir %{_includedir}/BOINC
%{_includedir}/BOINC/*.h
%{_libdir}/*a
%changelog
* Sat Oct 04 2008 mauro@suse.de
- Add bnc-431510.patch to fix bnc#431510.
* Tue Sep 09 2008 mauro@suse.de
- initial package for SuSE. boinc 6.2.18 (based on the enzokiel's
opensuse version).

11
boinc-docbook2x.patch Normal file
View File

@ -0,0 +1,11 @@
--- configure.ac.orig 2008-08-25 22:29:18.000000000 +0200
+++ configure.ac 2008-08-25 23:06:01.000000000 +0200
@@ -150,7 +150,7 @@
dnl Check for docbook2x-man, which we use to create the manpages in
dnl doc/manpages, and set the conditional HAVE_DOCBOOK2X_MAN to build
dnl the manpages only if docbook2x-man is available.
-AC_PATH_PROG(DOCBOOK2X_MAN, docbook2x-man)
+AC_PATH_PROG(DOCBOOK2X_MAN, docbook-to-man)
AM_CONDITIONAL(HAVE_DOCBOOK2X_MAN, [test -n "${DOCBOOK2X_MAN}"])
AC_SUBST([CLIENT_BIN_FILENAME],[boinc${EXEEXT}])

20
boinc-gui.desktop Normal file
View File

@ -0,0 +1,20 @@

[Desktop Entry]
Encoding=UTF-8
Exec=boincmgr
Icon=boinc-gui
Terminal=false
Type=Application
Name=BOINC Manager
GenericName=BOINC monitor and control utility
GenericName[de]=BOINC Überwachungs- und Kontrollprogramm
GenericName[pt]=Monitorização BOINC e utilitário de controlo
GenericName[cs]=Monitorovací a ovládací nástroj pro BOINC
Comment=Configure or monitor a BOINC core client
Comment[de]=BOINC Basis Client konfigurieren oder überwachen
Comment[pt]=Configurar ou monitorizar o cliente básico do BOINC
Comment[cs]=Monitoruje a nastavuje klienta BOINC
Categories=Utility;X-SuSE-WebUtility;GTK;
X-KDE-StartupNotify=true
X-SuSE-translate=true

3
boinc-icons.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7e8e4e90787afa32246b36ba46c373ab05f993db1899dc4d59cb26f482def2bb
size 45415

27
boinc-logrotate Normal file
View File

@ -0,0 +1,27 @@
/var/log/boinc_client.log {
daily
compress
dateext
notifempty
rotate 99
size 4M
missingok
create 640 root root
postrotate
/etc/init.d/boinc-client restart
endscript
}
/var/log/boinc_client_err.log {
daily
compress
dateext
notifempty
rotate 99
size 4M
missingok
create 640 root root
postrotate
/etc/init.d/boinc-client restart
endscript
}

206
boinc-rcscript.patch Normal file
View File

@ -0,0 +1,206 @@
--- client/scripts/boinc-client.in.orig Wed Sep 03 13:08:27 2008
+++ client/scripts/boinc-client.in Wed Sep 03 13:21:19 2008
@@ -25,7 +25,7 @@
# Provides: boinc
# Required-Start: $network
# Required-Stop: $network
-# Default-Start: 3 4 5
+# Default-Start: 3 4 5
# Default-Stop: 0 1 2 6
# Short-Description: This script monitors the BOINC client.
# Description: This script starts the local BOINC client as a daemon
@@ -54,12 +54,13 @@
########################################################################
# set the basic PATH
-export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/ucb/bin
+PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/ucb/bin
+export PATH
# Find the correct ps to use. On solaris /usr/ucb/ps is the one to use
# on everything else, we hope the first one in the path is the right one.
-if [ -x /usr/ucb/ps ] ; then
- PS=/usr/ucb/ps
+if [ -x /bin/ps ] ; then
+ PS=/bin/ps
else
PS=ps
fi
@@ -72,7 +73,7 @@
########################################################################
SHELLS="bash ksh zsh"
# count how many times we've tried to restart
-TRIES=$1
+TRIES=$2
if [ -z "$TRIES" ] ; then
TRIES=0
fi
@@ -92,7 +93,7 @@
for try in $SHELLS ; do
ex=`which $try`
if [ ! -z "${ex}" -a -x "${ex}" ] ; then
- if ${ex} $0 $TRIES ; then
+ if ${ex} $0 $1 $TRIES ; then
# it worked, we can exit
exit 0
else
@@ -114,7 +115,7 @@
# Name of user to run as:
#
-BOINCUSER=boinc
+BOINCUSER=root
# Working directory. Could be /home/boinc, /var/lib/boinc, etc..
# The reason I prefer /var/lib/boinc is that this works best for a
@@ -129,7 +130,7 @@
#
BOINCEXE_NAME=boinc_client
BOINCEXE=${bindir}/${BOINCEXE_NAME}
-BOINCCMD_NAME=boinccmd
+BOINCCMD_NAME=boinc_cmd
BOINCCMD=${bindir}/${BOINCCMD_NAME}
# Log files (you should rotate these occasionally)
@@ -161,9 +162,11 @@
# If there is the subsys directory, then use it ...
if [ -d /var/lock/subsys/ ]; then
- LOCKFILE=/var/lock/subsys/boinc-client
+ LOCKFILE=/var/lock/subsys/${BOINCEXE_NAME}
elif [ -d /var/lock ]; then
- LOCKFILE=/var/lock/boinc-client
+ LOCKFILE=/var/lock/${BOINCEXE_NAME}
+elif [ -d /var/run ]; then
+ LOCKFILE=/var/run/${BOINCEXE_NAME}.lock
fi
# su on Linux seems to need this to be set to work properly in a script
@@ -175,25 +178,26 @@
# but if the functions are not found we create our own simple replacements.
# (The idea for replacing the functions comes from OpenAFS. Thanks guys!)
-if [ -f /etc/rc.d/init.d/functions ] ; then
- . /etc/rc.d/init.d/functions
- if `printf "Hello" >/dev/null 2>/dev/null` ; then
+if [ -f /etc/init.d/functions ] ; then
+ . /etc/init.d/functions
+else
+ if printf "Hello" >/dev/null 2>/dev/null ; then
# printf works
printcol='printf \033[60G%s'
- if `echo -en "Hello" >/dev/null 2>/dev/null` ; then
+ elif echo -en "Hello" >/dev/null 2>/dev/null ; then
# echo -en works
printcol='echo -en \033[60G'
- else
+ else
# no printf make do with echo -n
printcol="echo -n .........."
- fi
- function echo_success () { $printcol "[OK]" ; }
- function echo_failure () { $printcol "[FAILED]" ; }
- function echo_warning () { $printcol "[WARNING]" ; }
- function killproc() {
+ fi
+ function echo_success () { $printcol "[OK]" ; }
+ function echo_failure () { $printcol "[FAILED]" ; }
+ function echo_warning () { $printcol "[WARNING]" ; }
+ function killproc() {
PID=`local_pidof $1`
[ $PID ] && kill $PID
- }
+ }
fi
# check if we have pidof. If not use ps and grep for the same job.
@@ -212,7 +216,9 @@
# If we don't have it, use su for the same job.
#
if [ ! -x /sbin/runuser ] ; then
- alias runuser=su
+ RUNUSER=su
+else
+ RUNUSER=runuser
fi
# Some additional places to look for executables
@@ -226,16 +232,16 @@
./boinc-client.conf
./boinc.conf
/etc/sysconfig/boinc-client
-/etc/default/boinc-client
-/etc/boinc-client.conf
-${sysconfdir}/sysconfig/boinc-client
-${sysconfdir}/default/boinc-client
-${sysconfdir}/boinc-client.conf
/etc/sysconfig/boinc
+/etc/default/boinc-client
/etc/default/boinc
+/etc/boinc-client.conf
/etc/boinc.conf
+${sysconfdir}/sysconfig/boinc-client
${sysconfdir}/sysconfig/boinc
+${sysconfdir}/default/boinc-client
${sysconfdir}/default/boinc
+${sysconfdir}/boinc-client.conf
${sysconfdir}/boinc.conf
none
"
@@ -264,6 +270,9 @@
. ${config_file}
fi
+## Get group-id for user $BOINCUSER in stringformat
+BOINCGROUP=`id -gn $BOINCUSER`
+
## Add ${BOINCDIR} to the path, just in case the executables are stored there.
export PATH=${PATH}:${BOINCDIR}
@@ -272,7 +281,7 @@
echo -n "Creating $BOINCDIR "
if mkdir -p $BOINCDIR 2>/dev/null ; then
if [ -n "$BOINCUSER" ] ; then
- if chown $BOINCUSER $BOINCDIR ; then
+ if chown $BOINCUSER:$BOINCGROUP $BOINCDIR ; then
echo_success
else
echo_failure
@@ -288,7 +297,8 @@
fi
## Check what user we are running as:
-USERNOW=`whoami`
+# we can't rely on the existence of "whoami" or "logname", so we'll use ps.
+USERNOW=`${PS} u $$ | tail -1 | awk '{print $1}'`
if [ -z "$BOINCUSER" ] ; then
BOINCUSER="${USERNOW}"
fi
@@ -321,7 +331,8 @@
exit 8
fi
elif [ "${USERNOW}" = "root" ] ; then
- if [ -z `su -s /bin/sh $BOINCUSER -c "if test -O ${BOINCDIR} ; then echo success ; fi"` ]; then
+ cmd="if test -O ${BOINCDIR} ; then echo success ; fi"
+ if [ -z `su $BOINCUSER -c "$cmd"` ]; then
echo -n ERROR: $BOINCDIR is not owned by $BOINCUSER.
echo_failure
echo
@@ -389,6 +400,7 @@
echo
fi
+ touch ${LOGFILE} ${ERRORLOG}
NOCORE="ulimit -c 0 2>&1 >/dev/null"
echo -n "Starting BOINC client as a daemon: "
if [ "${BOINCUSER}" = "${USERNOW}" ] ; then
@@ -396,7 +408,8 @@
$NOCORE
$BOINCEXE $BOINCOPTS >>$LOGFILE 2>>$ERRORLOG &
else
- runuser - $BOINCUSER -c "$NOCORE ; $BOINCEXE $BOINCOPTS >>$LOGFILE 2>>$ERRORLOG"
+ chown ${BOINCUSER}:$BOINCGROUP ${LOGFILE} ${ERRORLOG}
+ ${RUNUSER} - $BOINCUSER -c "$NOCORE ; $BOINCEXE $BOINCOPTS >>$LOGFILE 2>>$ERRORLOG" 2>/dev/null > /dev/null &
fi
sleep 3
PID=`local_pidof $BOINCEXE_NAME`

16
boinc-subdirs.patch Normal file
View File

@ -0,0 +1,16 @@
--- Makefile.am.orig 2008-08-25 22:29:18.000000000 +0200
+++ Makefile.am 2008-08-25 22:43:08.000000000 +0200
@@ -13,11 +13,11 @@
endif
if ENABLE_CLIENT
- CLIENT_SUBDIRS = client
+ CLIENT_SUBDIRS = client client/scripts
endif
if BUILD_CLIENTGUI
- CLIENTGUI_SUBDIRS = clientgui sea
+ CLIENTGUI_SUBDIRS = clientgui sea locale/client
endif
# ORDER MATTERS below. One must build dependencies FIRST, then things

91
boinc-sysconfig.patch Normal file
View File

@ -0,0 +1,91 @@
--- client/scripts/boinc-client.conf.orig 2008-08-28 14:24:15.000000000 +0200
+++ client/scripts/boinc-client.conf 2008-08-28 14:22:55.000000000 +0200
@@ -0,0 +1,63 @@
+## Path: Applications/BOINC
+## Description: Define userid under which boinc-client is run
+## Type: string
+## Default: "root"
+## Config: boinc-client
+# Here you should change the default value to another existing user,
+# for example use your (non-root) account.
+BOINCUSER="root"
+## Path: Applications/BOINC
+## Description: Define directory in which boinc-client is run
+## Type: string
+## Default: "/var/lib/boinc"
+## Config: boinc-client
+# Enter the dirctory where boinc-client shall store the project data.
+BOINCDIR="/var/lib/boinc"
+## Path: Applications/BOINC
+## Description: Define log file
+## Type: string
+## Default: "/var/log/boinc_client.log"
+## Config: boinc-client
+# Name and location of boinc logfile, normally no change necessary.
+LOGFILE="/var/log/boinc_client.log"
+## Path: Applications/BOINC
+## Description: Define error log file
+## Type: string
+## Default: "/var/log/boinc_client_err.log"
+## Config: boinc-client
+# Name and location of boinc error-logfile, normally no change necessary.
+ERRORLOG="/var/log/boinc_client_err.log"
+## Path: Applications/BOINC
+## Description: Define pid file
+## Type: string
+## Default: "/var/run/boinc_client.pid"
+## Config: boinc-client
+# Name and location of boinc pid-file, normally no change necessary.
+PIDFILE="/var/run/boinc_client.pid"
+## Path: Applications/BOINC
+## Description: Define lockfile
+## Type: string
+## Default: "/var/lock/subsys/boinc_client"
+## Config: boinc-client
+# Name and location of boinc lockfile, normally no change necessary.
+LOCKFILE="/var/lock/subsys/boinc_client"
+## Path: Applications/BOINC
+## Description: Define BOINC options
+## Type: string
+## Default: "--dir $BOINCDIR"
+## Config: boinc-client
+# Add this option if you want to allow boinc manager connections from remote machines
+# BOINCOPTS="--allow_remote_gui_rpc"
+#
+# Add this option if you want to turn off all logging
+# BOINCOPTS="--daemon"
+#
+# Add this option if you want to redirect logging to the files stderrdae.txt
+# and stdoutdae.txt in BOINCDIR rather than LOGFILE and ERRORLOG
+# BOINCOPTS="--redirectio"
+#
+# Add this option if you want to run only when no logins from anywhere are active
+# BOINCOPTS="--check_all_logins"
+#
+# For more options read the manpages.
+BOINCOPTS="--dir $BOINCDIR"
--- client/scripts/Makefile.am.orig 2008-08-25 22:29:15.000000000 +0200
+++ client/scripts/Makefile.am 2008-08-25 22:47:29.000000000 +0200
@@ -1,7 +1,17 @@
-all:
- chmod +x boinc-client
-
-install:
- $(INSTALL) -b boinc-client /etc/init.d/
+## -*- mode: makefile; tab-width: 4 -*-
+install-exec-hook:
+ chmod +x boinc-client
+ $(INSTALL) -d $(DESTDIR)/etc/init.d
+ $(INSTALL) -b boinc-client $(DESTDIR)/etc/init.d/boinc-client
+ if [ -d /etc/sysconfig ] ; then \
+ $(INSTALL) -d $(DESTDIR)/etc/sysconfig ; \
+ $(INSTALL) -m644 boinc-client.conf $(DESTDIR)/etc/sysconfig/boinc-client ; \
+ elif [ -d /etc/default ] ; then \
+ $(INSTALL) - $(DESTDIR)/etc/default ; \
+ $(INSTALL) -m644 boinc-client.conf $(DESTDIR)/etc/default/boinc-client ; \
+ else \
+ $(INSTALL) -d $(DESTDIR)/etc ; \
+ $(INSTALL) -m644 boinc-client.conf $(DESTDIR)/etc/boinc-client.conf ; \
+ fi

24
boincmgr Normal file
View File

@ -0,0 +1,24 @@