[PD] environment modules for Pd

Rivoire David david_rivoire at orange.fr
Mon Jan 19 13:21:29 CET 2015


Hello, i know it's not the subject, but i need help !
I want to record a sound from a drum-machine TR-808 patch on pure data, but i don't know how to connect the recorder in the patch...
Can anyone help me ? (Sorry for my english, i'm french)
Envoyé de mon iPhone

> Le 19 janv. 2015 à 00:22, Charles Z Henry <czhenry at gmail.com> a écrit :
> 
> Modules helps isolate software(s) from each other.  it's mainly so I
> don't break what is currently working when I'm messing around..
> 
> now if I can just keep from breaking the modules (sudden dread... nah
> never happen)
> 
>> On Sun, Jan 18, 2015 at 3:25 PM, Jonathan Wilkes <jancsika at yahoo.com> wrote:
>> Can't you just symlink to various Pd-Vanilla/Pd-double versions that you've
>> compiled?  That way you don't have to install anything system-wide.
>> 
>> -Jonathan
>> 
>> 
>> On Sunday, January 18, 2015 3:26 PM, Charles Z Henry <czhenry at gmail.com>
>> wrote:
>> 
>> 
>> Hi list,
>> 
>> It's been awhile since I've posted anything useful--I have badly
>> broken my desktop's pd install and am setting up a new pd install on
>> my laptop today.  I've run into problems with having too many
>> compilations of pd and installing them system-wide.  I realized that I
>> needed to have different installations for development and some
>> standard compilations of vanilla and extended--plus wanting to try out
>> pd-l2ork and pd-double precision that I've never tried before.  Also,
>> it's good to be able to have many versions of the same software for
>> regression testing and documenting bugs.
>> 
>> That's the motivation for now setting up "environment modules",
>> sometimes also called "Unix modules", keeping multiple instances of
>> software and choosing among them which one will be added to the path
>> in the current shell.  So, this is a discussion of how to get modules
>> working effectively for Pd.
>> 
>> 1.  Install
>> Deb/Ubuntu:
>> apt-get install environment-modules
>> RH/Fedora:
>> yum install environment-modules
>> 
>> (I leave it up to you to tell me what you do in OSX or arch).
>> 
>> To test, start a new terminal and run
>> module avail
>> 
>> If you receive the "module: command not found" error, then check your
>> terminal preferences.  Modules depend on having a "login" shell to
>> properly run startup scripts.
>> 
>> Modules use environment variables to keep track of the module search
>> path and loaded modules.  The "module" command itself is an alias for
>> "modulecmd $SHELL $@" (paraphrased).  To see the full list of module
>> related variables, run:
>> env | grep -i module
>> 
>> 2.  Location of module files
>> as non-root user, run
>> module load use.own
>> 
>> This will create a directory ~/privatemodules directory and the file
>> "null" in it.  "module avail" will list "null" in your privatemodules
>> directory.  You may replace "privatemodules" with a symlink to some
>> other location if you wish.  Each time you want to load modules from
>> ~/privatemodules, you have to run "module load use.own" first.
>> 
>> as root, you can edit /usr/share/modules/init/.modulespath and add any
>> path you like, like an NFS location.  You can also just place modules
>> into one of the default search paths, like
>> /etc/environment-modules/modules or /usr/share/modules/modulefiles.
>> 
>> Note: you may need to add or edit some things as root anyway.  Test
>> your installation for this tab-completion error in bash.  Type "module
>> load <tab>-<tab>" and see what happens.
>> In Ubuntu 14.04, the /etc/bash_completion.d/modules script has this line:
>> /usr/share/modules/3.2.10/bin/modulecmd bash -t avail 2>&
>> However, there is no such file.  You can edit the file and change that
>> path to /usr/bin/modulecmd or create a symlink to /usr/bin/modulecmd
>> as /usr/share/modules/3.2.10/bin/modulecmd.  Neither solution will
>> save you from re-encountering this bug next time you update
>> environment-modules.
>> 
>> digression: In ye olde cluster mill, this is how we're handling the
>> massive pileup of software: the OS install includes only development
>> software and infrastructure using packages (for platform stability and
>> consistency at the expense of performance).  All applications and
>> high-performance libraries are installed as a non-root user into
>> locations in NFS.  This lets us maintain arbitrary versions of
>> software without collisions or replacement, to be used at the users'
>> discretion.  In the past, I had re-written parts of a custom
>> application called "mpi-selector" (from Cisco) to let users setup
>> their environment... and later found out there was already a 20-year
>> old solution named "modules".  I edit the .modulespath file and
>> include a location in NFS--there's no sync issues and no outdated
>> files on the nodes, because everything needed for applications is in
>> NFS.  If a user needs to run a previous version at a date in the
>> future to reproduce results or compare changes, this can be done
>> easily and without admin assistance.
>> 
>> 3.  What to put in a module file:
>> 
>> If you've already installed modules, run
>> man modulefile
>> http here: http://linux.die.net/man/4/modulefile
>> 
>> The first line of a module should be:
>> #%Module
>> 
>> The primary commands you'll need are
>> prepend-path
>> setenv
>> set-alias
>> 
>> Note that modules use tcl, with specific commands that get translated
>> according to which shell you're currently using.  You can't run
>> arbitrary code to setup Pd in the module file (please prove me wrong
>> :D ).  If you have your own "run-pd.sh" script, that differs for each
>> version of Pd you want to use, you can still manage this well with an
>> alias and environment variables.
>> 
>> 4.  Using defaults
>> For sh/bash, edit ~/.profile or ~/.bash_profile, or for csh/tcsh, edit
>> ~/.cshrc, and add
>> module load use.own (for non-root user privileges as mentioned above)
>> module load pd-0.45.4
>> 
>> To load a different version, you can unload the current version
>> (tab-completion will list loaded modules) and then load a new one,
>> such as
>> module unload pd-0.45.4
>> module load pd-extended-0.43.4
>> 
>> 5.  Pure Data specific concerns (please provide feedback for anything
>> I may overlook---or simpler ways to accomplish things)
>> 
>> the HOME directory:
>> Each version of pd you're using may have its own home directory and
>> have its own .pdsettings file.
>> For this I make a tree of version-specific home directories such as:
>> mkdir -p /home/chenry/pd_HOME/pd-0.45.4
>> 
>> separate installation directories:
>> Then, I make an installation directory for it:
>> mkdir /home/chenry/pd-0.45.4
>> 
>> and compile using --prefix=/home/chenry/pd-0.45.4
>> 
>> My modules file for pd-0.45.4 is:
>> 
>> #%Module
>> setenv PD_HOME /home/chenry/pd_HOME/pd-0.45.4
>> setenv PD_BIN /home/chenry/pd-0.45.4/bin
>> prepend-path PATH /home/chenry/pd-0.45.4/bin
>> prepend-path LD_LIBRARY_PATH /home/chenry/pd-0.45.4/lib
>> set-alias pd {HOME=$PD_HOME $PD_BIN/pd $*}
>> set-alias pd-gui.tcl {HOME=$PD_HOME $PD_BIN/pd-gui.tcl $*}
>> set-alias pdsend {HOME=$PD_HOME $PD_BIN/pdsend $*}
>> set-alias pdreceive {HOME=$PD_HOME $PD_BIN/pdreceive $*}
>> 
>> I think this script might be a bit longer than it needs to be, but not
>> by much.  Any feedback is most welcome.
>> I found that I needed the PD_BIN variable in my "set-alias" commands.
>> I think I managed to cause a stack overflow with the alias pd as
>> {HOME=$PD_HOME pd $*}
>> 
>> You can check the aliased commands with the "type" command, ex. "type pd"
>> 
>> Also, the alias will not apply when you run pd in a debugger, such as
>> "strace pd".  You will need to expand the alias yourself and place the
>> variable declaration at the front as:
>> HOME=$PD_HOME strace $PD_BIN/pd
>> 
>> I also considered having HOME set to the PD_HOME variable globally,
>> which would avoid aliases.  If you did, defaults in ~/.profile would
>> be a little annoying.  Also, changes to other programs ~/. files would
>> be discarded when changing pd versions.
>> 
>> If you are not setting any defaults, it's fine to just set HOME in
>> your module files, knowing that you will be running only Pd after
>> running "module load" (and maybe jackd as well, if you have different
>> settings for jack you'd like to apply to each pd version).  In which
>> case, a working module file becomes just this short:
>> 
>> #%Module
>> setenv HOME /home/chenry/pd_HOME/pd-0.45.4
>> prepend-path PATH /home/chenry/pd-0.45.4/bin
>> prepend-path LD_LIBRARY_PATH /home/chenry/pd-0.45.4/lib
>> 
>> Chuck
>> 
>> _______________________________________________
>> Pd-list at lists.iem.at mailing list
>> UNSUBSCRIBE and account-management ->
>> http://lists.puredata.info/listinfo/pd-list
> 
> _______________________________________________
> Pd-list at lists.iem.at mailing list
> UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list



More information about the Pd-list mailing list