From 7c4b5195ae324a5dfdad7fa3a6acf4d2cb3600dd Mon Sep 17 00:00:00 2001 From: edd Date: Mon, 29 Jun 2009 02:31:47 +0000 Subject: [PATCH] a couple of updates git-svn-id: svn://svn.r-forge.r-project.org/svnroot/cran2deb@258 edb9625f-4e0d-4859-8d74-9fd3b1da38cb --- papers/useR2009/cran2deb.tex | 132 ++++++++++++++++++++++++++----- papers/useR2009/figures/useR.pdf | Bin 0 -> 26568 bytes 2 files changed, 114 insertions(+), 18 deletions(-) create mode 100644 papers/useR2009/figures/useR.pdf diff --git a/papers/useR2009/cran2deb.tex b/papers/useR2009/cran2deb.tex index e7f066b..bf67925 100644 --- a/papers/useR2009/cran2deb.tex +++ b/papers/useR2009/cran2deb.tex @@ -10,14 +10,17 @@ %\title[cran2deb: Automated CRAN to Debian packages generation]{cran2deb: A % system to automatically provide 1700+ CRAN packages as Debian binaries} -\title[cran2deb: CRAN to Debian packages]{cran2deb: Automating CRAN to Debian packages generation} - -%\subtitle{\textsl{Tutorial at R/Finance 2009}} +\title[cran2deb: CRAN to Debian packages]{cran2deb: A fully automated CRAN to \\ + Debian package generation system} +\subtitle{\textsl{UseR! 2009 Presentation}} \subject{UseR! 2009 Presentation} \author[Charles Blundell \and Dirk Eddelbuettel]{Charles Blundell\inst{1} \and Dirk Eddelbuettel\inst{2}} \institute[Gatsby \and Debian]{\inst{1}Gatsby Computational Neuroscience Unit - \\ University College London \and \inst{2}Debian / R Projects} -\date[UseR! 2009]{Presentation at UseR! 2009 \\ Rennnes, France \\ July 2009} + \\ University College London, UK \and \inst{2}Debian and R Projects \\ Chicago, +IL, USA} +%\date[UseR! 2009]{Presentation at UseR! 2009 \\ Rennnes, France \\ July 2009} +\date[UseR! 2009 Presentation]{Universit\'{e} Rennes II, Agrocampus Ouest \\ Laboratoire de + Math\'{e}matiques Appliqu\'{e}es \\ 8-10 July 2009} \begin{document} @@ -92,7 +95,7 @@ \item Ubuntu has taken Debian, added a fair amount of spit and polish, as well as regular bi-annual releases, and has rapidly gained mind- and well as market-share as the Linux distribution to beat. - \item Lastly, we note that the CRAN backend is also implemented on Debian. + \item We also note that the CRAN backend is implemented on Debian. \end{itemize} \end{frame} @@ -141,8 +144,8 @@ \item debian/rules is a Makefile containing all steps to configure, build, install, package-create and clean \end{itemize} - \item Employs a number of external scripts and tools tie into this, - similar to what R has below \texttt{\$RHOME/share} + \item Employs a number of external tools scripts and tools, can be used + interactively or in batch mode in chroot'ed 'clean rooms' \end{itemize} \end{frame} @@ -163,6 +166,7 @@ \begin{itemize} \item Top-down approach \item Monolithic and large Perl program + \item Meta-information encode directly as Perl hashes in program \item Re-implementing chunks of what \R does in parsing archives \item Not very robust \end{itemize} @@ -183,30 +187,121 @@ \end{frame} \begin{frame} - \frametitle{Technology Overview} - \framesubtitle{Charles: Can you fill something in here, if I haven't stolen - all nuggets on the previous slide?} + \frametitle{Technology Overview: Big Picture} + \framesubtitle{Key components} + +% \textsc{Charles: Can you fill something in here, if I haven't stolen +% all nuggets on the previous slide?} + + cran2deb is implemented as a collection of small tools: + \begin{itemize} + \item cran2deb is just a wrapper script calling out to twenty-one other + 'worker' scripts implementing the twenty-one basic high-level commands + \begin{itemize} + \item 'worker' scripts are written in \R (for littler), Korn/Bash shell, + and in the Plan9 shell rc + \item all these scripts are small: the largest is 4 kb and only seven + are larger than 1 kb + \item this is recursive: 'help' is one of these scripts scanning for + doc-strings in the other scripts + \end{itemize} + \item cran2deb is also an R package that is being called by some of the R + scripts; the R package has just over 1500 lines of code, and it calls out + to R functionality from package utils and tools. + \item SQL it used fairly extensively via nine tables containing everything + from meta-information, blacklist to build logs. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Technology Overview} + \framesubtitle{Continued} + + Re-use, re-duce, re-cycle: + + \begin{itemize} + \item All this makes use of Debian build infrastructure, notably the + pbuilder chroot environment and the package management system + \item cran2deb sets the build environment up by invoking the proper Debian + scripts + \item the 'production' use if fully automated via cron and report status + summaries by email + \item per-package patches are allowed (currently eleven packages have + mostly trivial patches) + \item source code is available via the r-forge subversion repository and archive + \end{itemize} \end{frame} \section[Status]{Status: Where are we now?} + \begin{frame} - \frametitle{Current Status} + \frametitle{Building 1700+ package} + \framesubtitle{Summary from a package views} + + It's easy: basically \textsl{everything} builds and is available as a + Debian package (complete with full dependencies) --- apart from: + + \begin{itemize} + \item 17 packages that are \textsl{not free enough}:\footnote{We should + provide a longer discussion of the various licenses.} + mclust, mclust02, ConvCalendar, SDDA, conf.design, isa2, optmatch, + rankreg, realized, rngwell19937, tnet, spatialkernel, Bhat, PTAk, + PredictiveRegression, RLadyBug, mapproj + \item 1 package that is obsolete: xgobi + \item 2 package that break building packages via cran2deb:\footnote{It + takes down the cronjob; we are stumped as to why.} dprep, EngrExpt + \item 1 package that is not built for 'other' reasons:\footnote{It contains + binary code.} sabreR + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Building 1700+ package} + \framesubtitle{Continued} + + \begin{itemize} + \item 47 packages that have \textsl{unsatisfied + dependencies}:\footnote{Some require other commercial software, some + require software we classified\newline as non-free, some require BioConductor packages.} + ROracle, Rlsf, Rsge, CarbonEL, VhayuR, gputools, klaR, wgaim, svGUI, + RScaLAPACK, caMassClass, Rcplex, ADaCGH, DAAGbio, GFMaps, GOSim, + Metabonomic, classGraph, gcExplorer, logilasso, pcalg, celsius, multtest, + hopach, GExMap, LMGene, PCS, SubpathwayMiner, gene2pathway, PhViD, + SNPMaP, qdg, lsa, mpm, sisus, metaMA, clustTool, clustvarsel, + SpectralGEM, bayesCGH, crosshybDetector + \item 7 package that (as of end of June) fails for unclassified reasons: + IDPmisc, Rsymphony, SuppDists, aroma.apd, aroma.core, cmprskContin, mvgraph + \end{itemize} + + \MedSkip + \textsl{But everything else}---currently 1768 packages---builds and is + available via \texttt{apt-get} and other package management frontends! +\end{frame} + +\begin{frame} + \frametitle{Status and credits} \framesubtitle{Ready for wider deployment and testing} + Who do we owe, and where is it at: + \begin{itemize} - \item Ground-work provided during Google Summer of Code 2008 under the - umbrella of the \R Foundation - \item Currently using a (small) Xen-instance on a server at WU Wien to host - two Debian pbuilder chroots and an archive + \item The ground-work was provided during Google Summer of Code (GSoC) 2008 under the + umbrella of the \R Foundation. We thank Google for the GSoC support. + \item Currently we are using a (small) Xen-instance on a server at WU Wien to host + two Debian pbuilder chroots and an archive. We thank WU Wien/CRAN for + hosting and cpu cycles. \item 1700+ packages for i386 and amd64 on Debian testing \item In daily use for the last few weeks! \end{itemize} \MedSkip - Just add the following URL (with -amd64 for 64-bit) \newline - { \SmallSkip \scriptsize + So just add one of these URLs:\newline + i386 \phantom{xx} : { \SmallSkip \scriptsize \texttt{deb http://xmcorsairs.wu.ac.at/cran2deb/debian-i386 testing/} + } \newline + amd64 : { \SmallSkip \scriptsize + \texttt{deb http://xmcorsairs.wu.ac.at/cran2deb/debian-amd64 testing/} } \end{frame} @@ -216,6 +311,7 @@ \frametitle{Question to be addressed} \framesubtitle{These may not be showstoppers} + Things that still need to be sorted out: \begin{itemize} \item What can or cannot be (re-)distributed by CRAN and its mirrors? \item What can or cannot be used by all users? diff --git a/papers/useR2009/figures/useR.pdf b/papers/useR2009/figures/useR.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2183386f60618b96a8e3d497daa9103e64329d3b GIT binary patch literal 26568 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 OVc|lhq7suANBuvO$>sb2 literal 0 HcmV?d00001 -- 2.39.5