forked from pool/boinc-client
This commit is contained in:
commit
2535b7b0de
23
.gitattributes
vendored
Normal file
23
.gitattributes
vendored
Normal 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
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
.osc
|
937
bnc-431510.patch
Normal file
937
bnc-431510.patch
Normal 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
3
boinc-6.2.18.tar.bz2
Normal 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
66
boinc-LC_MESSAGES.patch
Normal 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
11
boinc-client.changes
Normal 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
244
boinc-client.spec
Normal 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
11
boinc-docbook2x.patch
Normal 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
20
boinc-gui.desktop
Normal 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
3
boinc-icons.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:7e8e4e90787afa32246b36ba46c373ab05f993db1899dc4d59cb26f482def2bb
|
||||
size 45415
|
27
boinc-logrotate
Normal file
27
boinc-logrotate
Normal 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
206
boinc-rcscript.patch
Normal 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
16
boinc-subdirs.patch
Normal 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
91
boinc-sysconfig.patch
Normal 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
|
||||
|