diff --git a/.cvsignore b/.cvsignore index 1f488fc..273924f 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -torque-2.1.10.tar.gz +torque-2.4.8.tar.gz diff --git a/README-localhost b/README-localhost deleted file mode 100644 index c63a012..0000000 --- a/README-localhost +++ /dev/null @@ -1,20 +0,0 @@ -To setup a basic single-node localhost-only batch system, install the -torque-server, torque-mom, and torque-scheduler packages, and do something like -this: - -/sbin/chkconfig pbs_mom on -/sbin/chkconfig pbs_server on -/sbin/chkconfig pbs_sched on -/bin/hostname --long > %{torquehomedir}/server_priv/nodes -/bin/hostname --long > %{torquehomedir}/server_name -service pbs_server start -qmgr -c "s s scheduling=true" -qmgr -c "c q batch queue_type=execution" -qmgr -c "s q batch started=true" -qmgr -c "s q batch enabled=true" -qmgr -c "s q batch resources_default.nodes=1" -qmgr -c "s q batch resources_default.walltime=3600" -qmgr -c "s s default_queue=batch" -service pbs_mom restart -service pbs_sched restart - diff --git a/README.Fedora b/README.Fedora new file mode 100644 index 0000000..0d82a1c --- /dev/null +++ b/README.Fedora @@ -0,0 +1,71 @@ +This README describes how to get the most basic working +torque service on a single host. + +To setup a basic single-node localhost-only batch system, install the +torque-server, torque-mom, and torque-scheduler packages, and do something like +this: + + +1) Get your full hostname with + +# /bin/hostname --long + +e.g myhost.example.org + +2) Edit /etc/torque/server_name +to contain the single line + +myhost.example.org + +3) Edit /etc/torque/mom/config +to contain the single line + +$pbsserver myhost.example.org + +4) Create a torque serverdb file. +# /usr/sbin/pbs_server -D -t create + +Warning this will remove any existing serverdb +file located at /var/lib/torque/server_priv/serverdb + +You will have to Ctrl^C the pbs_server command, it will +only take a moment to create this file. + +5) Start the pbs_server and configure it. +service pbs_server start +# qmgr -c "s s scheduling=true" +# qmgr -c "c q batch queue_type=execution" +# qmgr -c "s q batch started=true" +# qmgr -c "s q batch enabled=true" +# qmgr -c "s q batch resources_default.nodes=1" +# qmgr -c "s q batch resources_default.walltime=3600" +# qmgr -c "s s default_queue=batch" + +6) Add one batch worker to your pbs_server. + +# qmgr -c "c n myhost.example.org" + +7) Start the pbs_mom and pbs_sched deamons. + +# service pbs_mom start +# service pbs_sched start + +8) Use chkconfig to start the services at boot time. + +# /sbin/chkconfig pbs_mom on +# /sbin/chkconfig pbs_server on +# /sbin/chkconfig pbs_sched on + +9) Submit a test job. +As a user not as root run the following + +$ qsub < $RPM_BUILD_ROOT%{_initrddir}/$daemon - %__chmod 755 $RPM_BUILD_ROOT%{_initrddir}/$daemon -done +mkdir -p %{buildroot}%{_initrddir} +install -p -m 755 contrib/init.d/pbs_mom %{buildroot}%{_initrddir}/pbs_mom +install -p -m 755 contrib/init.d/pbs_sched %{buildroot}%{_initrddir}/pbs_sched +install -p -m 755 contrib/init.d/pbs_server %{buildroot}%{_initrddir}/pbs_server %if %{build_gui} # This is really trivial, but cleans up an rpmlint warning -%__sed -i -e 's|%_lib/../||' $RPM_BUILD_ROOT%{_bindir}/xpbs - -# install .desktop files and my ugly icons -desktop-file-install --vendor fedora \ - --dir $RPM_BUILD_ROOT%{_datadir}/applications \ - --add-category X-Fedora \ - xpbs.desktop -desktop-file-install --vendor fedora \ - --dir $RPM_BUILD_ROOT%{_datadir}/applications \ - --add-category X-Fedora \ - xpbsmon.desktop -%__install -d $RPM_BUILD_ROOT%{_datadir}/pixmaps -%__install -p -m0644 xpbs.png xpbsmon.png $RPM_BUILD_ROOT%{_datadir}/pixmaps +sed -i -e 's|%{_lib}/../||' %{buildroot}%{_bindir}/xpbs +desktop-file-install --dir %{buildroot}%{_datadir}/applications xpbs.desktop +desktop-file-install --dir %{buildroot}%{_datadir}/applications xpbsmon.desktop +install -d %{buildroot}%{_datadir}/pixmaps +install -p -m0644 xpbs.png xpbsmon.png %{buildroot}%{_datadir}/pixmaps %endif - # alternatives stuff for bin in qalter qdel qhold qrls qselect qstat qsub do - mv $RPM_BUILD_ROOT%{_bindir}/$bin $RPM_BUILD_ROOT%{_bindir}/${bin}-torque - mv $RPM_BUILD_ROOT%{_mandir}/man1/${bin}.1 \ - $RPM_BUILD_ROOT%{_mandir}/man1/${bin}-torque.1 + mv %{buildroot}%{_bindir}/$bin %{buildroot}%{_bindir}/${bin}-torque + mv %{buildroot}%{_mandir}/man1/${bin}.1 \ + %{buildroot}%{_mandir}/man1/${bin}-torque.1 done +# Relocate configuration files. +mkdir -p %{buildroot}%{_sysconfdir}/torque +pushd %{buildroot}%{torquehomedir} +mv pbs_environment %{buildroot}%{_sysconfdir}/torque +mv server_name %{buildroot}%{_sysconfdir}/torque +ln -s %{_sysconfdir}/torque/pbs_environment . +ln -s %{_sysconfdir}/torque/server_name . +popd + +# Relocate mom_logs to /var/log +mkdir -p %{buildroot}%{_var}/log/torque +pushd %{buildroot}%{torquehomedir} +mv mom_logs %{buildroot}%{_var}/log/torque +ln -s %{_var}/log/torque/mom_logs . +popd + +# Install mom_priv/config file to /etc/torque/mom +mkdir -p %{buildroot}%{_sysconfdir}/torque/mom +install -p -m 644 config %{buildroot}%{_sysconfdir}/torque/mom/config +pushd %{buildroot}%{torquehomedir}/mom_priv +ln -s %{_sysconfdir}/torque/mom/config . +popd + +# Install sched_config files to /etc/torque/sched +mkdir -p %{buildroot}%{_sysconfdir}/torque/sched +pushd %{buildroot}%{torquehomedir}/sched_priv +for CONFIG in dedicated_time holidays resource_group sched_config ; do + mv $CONFIG %{buildroot}%{_sysconfdir}/torque/sched/. + ln -s %{_sysconfdir}/torque/sched/$CONFIG . +done +popd + +# Relocate sched_logs to /var/log +pushd %{buildroot}%{torquehomedir} +mv sched_logs %{buildroot}%{_var}/log/torque +ln -s %{_var}/log/torque/sched_logs . +popd + +# Relocate server_logs to /var/log +pushd %{buildroot}%{torquehomedir} +mv server_logs %{buildroot}%{_var}/log/torque +ln -s %{_var}/log/torque/server_logs . +popd + %clean -%__rm -rf "$RPM_BUILD_ROOT" - +rm -rf %{buildroot} %post -if %__grep -q "PBS services" /etc/services;then +if grep -q "PBS services" /etc/services;then : PBS services already installed else - cat<<-__EOF__>>/etc/services + cat<<__EOF__>>/etc/services # Standard PBS services pbs 15001/tcp # pbs server (pbs_server) pbs 15001/udp # pbs server (pbs_server) @@ -207,137 +387,6 @@ pbs_sched 15004/udp # scheduler __EOF__ fi - -%files -%defattr(-, root, root) -%doc README.torque torque.setup Release_Notes CHANGELOG PBS_License.txt README-localhost -%config(noreplace) %{torquehomedir}/pbs_environment -%config(noreplace) %{torquehomedir}/server_name -%dir %{torquehomedir} -%{torquehomedir}/aux -%{torquehomedir}/spool - - -%package docs -Group: Documentation -Summary: Documentation files for TORQUE -Requires: %{name} = %{?epoch:%{epoch}:}%{version}-%{release} -Provides: pbs-docs -%description docs -%shared_description -This package holds the documentation files. - -%files docs -%defattr(-, root, root) -%doc doc/admin_guide.ps -%{_mandir}/man*/* -%exclude %{_mandir}/man1/qsub-torque.1.gz -%exclude %{_mandir}/man1/qalter-torque.1.gz -%exclude %{_mandir}/man1/qdel-torque.1.gz -%exclude %{_mandir}/man1/qhold-torque.1.gz -%exclude %{_mandir}/man1/qrls-torque.1.gz -%exclude %{_mandir}/man1/qselect-torque.1.gz -%exclude %{_mandir}/man1/qstat-torque.1.gz - - -%package scheduler -Group: System Environment/Daemons -Summary: Simple fifo scheduler for TORQUE -Requires: %{name} = %{?epoch:%{epoch}:}%{version}-%{release} -Provides: pbs-scheduler -%description scheduler -%shared_description -This package holds the fifo C scheduler. - -%files scheduler -%defattr(-, root, root) -%attr(0755, root, root) %{_sbindir}/pbs_sched -%attr(0755, root, root) %{_sbindir}/qschedd -%{_initrddir}/pbs_sched -%dir %{torquehomedir}/sched_priv -%config(noreplace) %{torquehomedir}/sched_priv/* -%{torquehomedir}/sched_logs - -%post scheduler -/sbin/chkconfig --add pbs_sched - -%preun scheduler -if [ $1 -eq 0 ]; then - /sbin/service pbs_sched stop - /sbin/chkconfig --del pbs_sched -fi - - -%package server -Group: System Environment/Daemons -Summary: The main part of TORQUE -Requires: %{name} = %{?epoch:%{epoch}:}%{version}-%{release} -Provides: pbs-server -%description server -%shared_description -This package holds the server. - -%files server -%defattr(-, root, root) -%attr(0755, root, root) %{_sbindir}/pbs_server -%attr(0755, root, root) %{_sbindir}/qserverd -%attr(0755, root, root) %{_sbindir}/momctl -%{_initrddir}/pbs_server -%{torquehomedir}/server_logs -%{torquehomedir}/server_priv - -%post server -/sbin/chkconfig --add pbs_server - -%preun server -if [ $1 -eq 0 ]; then - /sbin/service pbs_server stop - /sbin/chkconfig --del pbs_server -fi - - -%package mom -Group: System Environment/Daemons -Summary: Node execution daemon for TORQUE -Requires: %{name} = %{?epoch:%{epoch}:}%{version}-%{release} -Provides: pbs-mom -%description mom -%shared_description -This package holds the execute daemon required on every node. - -%files mom -%defattr(-, root, root) -%attr(0755, root, root) %{_sbindir}/pbs_mom -%attr(0755, root, root) %{_sbindir}/qnoded -%attr(0755, root, root) %{_bindir}/pbs_track -%{_initrddir}/pbs_mom -%if %{use_rcp} -%attr(4755 root root) %{_sbindir}/pbs_rcp -%endif -%{torquehomedir}/mom_priv -%{torquehomedir}/mom_logs -%{torquehomedir}/checkpoint -%{torquehomedir}/undelivered - -%post mom -/sbin/chkconfig --add pbs_mom - -%preun mom -if [ $1 -eq 0 ]; then - /sbin/service pbs_mom stop - /sbin/chkconfig --del pbs_mom -fi - - -%package client -Group: Applications/System -Summary: Client part of TORQUE -Requires: %{name} = %{?epoch:%{epoch}:}%{version}-%{release} -Provides: pbs-client -%description client -%shared_description -This package holds the command-line client programs. - %posttrans client /usr/sbin/alternatives --install %{_bindir}/qsub qsub %{_bindir}/qsub-torque 10 \ --slave %{_mandir}/man1/qsub.1.gz qsub-man \ @@ -366,8 +415,52 @@ if [ $1 -eq 0 ]; then /usr/sbin/alternatives --remove qsub %{_bindir}/qsub-torque fi +%post libs -p /sbin/ldconfig +%postun libs -p /sbin/ldconfig + +%post mom +/sbin/chkconfig --add pbs_mom + +%preun mom +if [ $1 -eq 0 ]; then + /sbin/service pbs_mom stop >/dev/null 2>&1 + /sbin/chkconfig --del pbs_mom +fi + +%post scheduler +/sbin/chkconfig --add pbs_sched + +%preun scheduler +if [ $1 -eq 0 ]; then + /sbin/service pbs_sched stop >/dev/null 2>&1 + /sbin/chkconfig --del pbs_sched +fi + +%post server +/sbin/chkconfig --add pbs_server + +%preun server +if [ $1 -eq 0 ]; then + /sbin/service pbs_server stop >/dev/null 2>&1 + /sbin/chkconfig --del pbs_server +fi + +%files +%defattr(-, root, root, -) +%doc README.torque torque.setup Release_Notes +%doc CHANGELOG PBS_License.txt README.Fedora +%dir %{torquehomedir} +%dir %{torquehomedir}/aux +%dir %{torquehomedir}/spool +%dir %{torquehomedir}/undelivered +%{torquehomedir}/pbs_environment +%{torquehomedir}/server_name +%config(noreplace) %{_sysconfdir}/torque/pbs_environment +%config(noreplace) %{_sysconfdir}/torque/server_name + + %files client -%defattr(-, root, root) +%defattr(-, root, root, -) %{_bindir}/q* %{_bindir}/chk_tree %{_bindir}/hostn @@ -375,37 +468,110 @@ fi %{_bindir}/pbsdsh %{_bindir}/pbsnodes %{_bindir}/printjob -%{_bindir}/printtracking %{_bindir}/printserverdb +%{_bindir}/printtracking %{_bindir}/tracejob -%attr(4755 root root) %{_sbindir}/pbs_iff +%{_sbindir}/momctl +%attr(4755, root, root) %{_sbindir}/pbs_iff %{_sbindir}/pbs_demux -%if %use_tcl +%if %{use_tcl} %{_bindir}/pbs_tclsh %endif -%{_mandir}/man1/qsub-torque.1.gz -%{_mandir}/man1/qalter-torque.1.gz -%{_mandir}/man1/qdel-torque.1.gz -%{_mandir}/man1/qhold-torque.1.gz -%{_mandir}/man1/qrls-torque.1.gz -%{_mandir}/man1/qselect-torque.1.gz -%{_mandir}/man1/qstat-torque.1.gz +%{_mandir}/man1/qsub-torque.1.* +%{_mandir}/man1/qalter-torque.1.* +%{_mandir}/man1/qdel-torque.1.* +%{_mandir}/man1/qhold-torque.1.* +%{_mandir}/man1/qrls-torque.1.* +%{_mandir}/man1/qselect-torque.1.* +%{_mandir}/man1/qstat-torque.1.* -%package gui -Group: Applications/System -Summary: Graphical clients for TORQUE -Requires: %{name}-client = %{?epoch:%{epoch}:}%{version}-%{release} -Provides: xpbs xpbsmon -Provides: %{name}-x11tools -%description gui -%shared_description -This package holds the graphical clients. +%files docs +%defattr(-, root, root, -) +%doc doc/admin_guide.ps +%{_mandir}/man1/basl2c.1.* +%{_mandir}/man1/nqs2pbs.1.* +%{_mandir}/man1/pbs.1.* +%{_mandir}/man1/pbsdsh.1.* +%{_mandir}/man1/qchkpt.1.* +%{_mandir}/man1/qmgr.1.* +%{_mandir}/man1/qmove.1.* +%{_mandir}/man1/qmsg.1.* +%{_mandir}/man1/qorder.1.* +%{_mandir}/man1/qrerun.1.* +%{_mandir}/man1/qsig.1.* +%{_mandir}/man1/xpbs.1.* +%{_mandir}/man1/xpbsmon.1.* +%{_mandir}/man3/pbs_alterjob.3.* +%{_mandir}/man3/pbs_connect.3.* +%{_mandir}/man3/pbs_default.3.* +%{_mandir}/man3/pbs_deljob.3.* +%{_mandir}/man3/pbs_disconnect.3.* +%{_mandir}/man3/pbs_geterrmsg.3.* +%{_mandir}/man3/pbs_holdjob.3.* +%{_mandir}/man3/pbs_locate.3.* +%{_mandir}/man3/pbs_manager.3.* +%{_mandir}/man3/pbs_movejob.3.* +%{_mandir}/man3/pbs_msgjob.3.* +%{_mandir}/man3/pbs_orderjob.3.* +%{_mandir}/man3/pbs_rerunjob.3.* +%{_mandir}/man3/pbs_rescquery.3.* +%{_mandir}/man3/pbs_rescreserve.3.* +%{_mandir}/man3/pbs_rlsjob.3.* +%{_mandir}/man3/pbs_runjob.3.* +%{_mandir}/man3/pbs_selectjob.3.* +%{_mandir}/man3/pbs_selstat.3.* +%{_mandir}/man3/pbs_sigjob.3.* +%{_mandir}/man3/pbs_stagein.3.* +%{_mandir}/man3/pbs_statjob.3.* +%{_mandir}/man3/pbs_statnode.3.* +%{_mandir}/man3/pbs_statque.3.* +%{_mandir}/man3/pbs_statserver.3.* +%{_mandir}/man3/pbs_submit.3.* +%{_mandir}/man3/pbs_terminate.3.* +%{_mandir}/man3/rpp.3.* +%{_mandir}/man3/tm.3.* +%{_mandir}/man7/pbs_job_attributes.7.* +%{_mandir}/man7/pbs_queue_attributes.7.* +%{_mandir}/man7/pbs_resources.7.* +%{_mandir}/man7/pbs_resources_aix4.7.* +%{_mandir}/man7/pbs_resources_aix5.7.* +%{_mandir}/man7/pbs_resources_darwin.7.* +%{_mandir}/man7/pbs_resources_digitalunix.7.* +%{_mandir}/man7/pbs_resources_freebsd.7.* +%{_mandir}/man7/pbs_resources_fujitsu.7.* +%{_mandir}/man7/pbs_resources_hpux10.7.* +%{_mandir}/man7/pbs_resources_hpux11.7.* +%{_mandir}/man7/pbs_resources_irix5.7.* +%{_mandir}/man7/pbs_resources_irix6.7.* +%{_mandir}/man7/pbs_resources_irix6array.7.* +%{_mandir}/man7/pbs_resources_linux.7.* +%{_mandir}/man7/pbs_resources_netbsd.7.* +%{_mandir}/man7/pbs_resources_solaris5.7.* +%{_mandir}/man7/pbs_resources_solaris7.7.* +%{_mandir}/man7/pbs_resources_sp2.7.* +%{_mandir}/man7/pbs_resources_sunos4.7.* +%{_mandir}/man7/pbs_resources_unicos8.7.* +%{_mandir}/man7/pbs_resources_unicosmk2.7.* +%{_mandir}/man7/pbs_server_attributes.7.* +%{_mandir}/man8/pbs_mom.8.* +%{_mandir}/man8/pbs_sched.8.* +%{_mandir}/man8/pbs_sched_basl.8.* +%{_mandir}/man8/pbs_sched_cc.8.* +%{_mandir}/man8/pbs_sched_tcl.8.* +%{_mandir}/man8/pbs_server.8.* +%{_mandir}/man8/pbsnodes.8.* +%{_mandir}/man8/qdisable.8.* +%{_mandir}/man8/qenable.8.* +%{_mandir}/man8/qrun.8.* +%{_mandir}/man8/qstart.8.* +%{_mandir}/man8/qstop.8.* +%{_mandir}/man8/qterm.8.* %if %{build_gui} %files gui -%defattr(-, root, root) +%defattr(-, root, root, -) %{_bindir}/pbs_wish %{_bindir}/xpbs %{_bindir}/xpbsmon @@ -415,71 +581,89 @@ This package holds the graphical clients. %{_datadir}/pixmaps/*.png %endif - -%package -n lib%{name} -Summary: Run-time libs for programs which will use the %{name} library -Group: Development/Libraries -Requires: %{name} = %{?epoch:%{epoch}:}%{version}-%{release} - -%description -n lib%{name} -%shared_description -This package includes the shared libraries -necessary for running TORQUE programs. - -%files -n lib%{name} -%defattr(-, root, root) +%files libs +%defattr(-, root, root, -) %{_libdir}/*.so.* -%post -n lib%{name} -p /sbin/ldconfig -%postun -n lib%{name} -p /sbin/ldconfig - -%package -n lib%{name}-devel -Summary: Development tools for programs which will use the %{name} library -Group: Development/Libraries -Requires: lib%{name} = %{?epoch:%{epoch}:}%{version}-%{release} - -%description -n lib%{name}-devel -%shared_description -This package includes the header files and static libraries -necessary for developing programs which will use %{name}. - -%files -n lib%{name}-devel -%defattr(-, root, root) -%{_libdir}/*.a +%files devel +%defattr(-, root, root, -) %{_libdir}/*.so %{_includedir}/torque %{_bindir}/pbs-config -%package pam -Summary: PAM module for TORQUE MOM nodes -Group: System Environment/Base - -%description pam -%shared_description -A simple PAM module to authorize users on PBS MOM nodes with a running job. +%files mom +%defattr(-, root, root, -) +%{_sbindir}/pbs_mom +%{_sbindir}/qnoded +%{_sbindir}/pbs_demux +%{_bindir}/pbs_track +%{_initrddir}/pbs_mom +%if %{use_rcp} +%attr(4755, root, root) %{_sbindir}/pbs_rcp +%endif +%{torquehomedir}/mom_priv +%{torquehomedir}/mom_logs +%{torquehomedir}/checkpoint +%{torquehomedir}/undelivered +%dir %{_var}/log/torque +%dir %{_var}/log/torque/mom_logs +%dir %{_sysconfdir}/torque/mom +%config(noreplace) %{_sysconfdir}/torque/mom/config %files pam -%defattr(-, root, root) +%defattr(-, root, root, -) %doc src/pam/README.pam /%{_lib}/security/pam_pbssimpleauth.so +%files scheduler +%defattr(-, root, root, -) +%attr(0755, root, root) %{_sbindir}/pbs_sched +%{_sbindir}/qschedd +%{_initrddir}/pbs_sched +%dir %{torquehomedir}/sched_priv +%config(noreplace) %{torquehomedir}/sched_priv/* +%{torquehomedir}/sched_logs +%dir %{_var}/log/torque/sched_logs +%dir %{_sysconfdir}/torque/sched +%config(noreplace) %{_sysconfdir}/torque/sched/dedicated_time +%config(noreplace) %{_sysconfdir}/torque/sched/holidays +%config(noreplace) %{_sysconfdir}/torque/sched/resource_group +%config(noreplace) %{_sysconfdir}/torque/sched/sched_config + +%files server +%defattr(-, root, root, -) +%attr(0755, root, root) %{_sbindir}/pbs_server +%attr(0755, root, root) %{_sbindir}/momctl +%{_sbindir}/qserverd +%{_initrddir}/pbs_server +%dir %{_var}/log/torque/server_logs +%{torquehomedir}/server_logs +%{torquehomedir}/server_priv + %changelog -* Fri Feb 12 2010 Steve Traylen - 2.3.10-1 -- New upstream 2.3.10 +* Thu Jul 1 2010 Steve Traylen - 2.4.8-2 +- Set torquehome to /var/lib/torque rather than /var/torque +- Drop provides and obsoletes since never present in Fedora/EPEL. +- Don't use a variable for the description. +- Split install of init.d scripts to build and install sections + as appropriate. +- Mark docs subpackage as noarch. +- Rename libtorque package to more normal torque-libs package. +- Rename libtorque-devel package to more normal torque-devel package. +- Remove the unused epoch and snapshot variables. +- Have mom requires openssh-clients and server openssh-server +- Have mom, sched and server log to /var/log/torque and symlinks +- Move configurtion files to /etc/torque and symlink in expected. +- Be more explicit about man page in the files section. +- Rename README-localhost to README.Fedora to make it more obvious + it's related to this package. + +* Wed Jun 2 2010 Tom "spot" Callaway - 2.4.8-1 +- update to 2.4.8 +- drop static libs +- cleanup spec file -* Tue Jan 19 2010 Steve Traylen - 2.3.9-1 -- New upstream 2.3.9 -* Thu Dec 3 2009 Steve Traylen - 2.3.8-1 -- Updated to upstream 2.3.8 -- First EPEL build. -- Add new commands to package. - /usr/bin/pbs_track - /usr/bin/printserverdb - /usr/sbin/qnoded - /usr/sbin/qschedd - /usr/sbin/qserverd -- Remove torque-2.1.10-NI_MAXSERV.patch as not needed any more. * Sun Jul 26 2009 Fedora Release Engineering - 2.1.10-8 - Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild