From d1e40a55aff988007d33fccff401e9e31caaf768 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Mon, 26 Sep 2011 02:54:44 +0200 Subject: [PATCH] [IMP] directory cleanups, moved historical cruft into history bzr revid: al@openerp.com-20110926005444-a7vqjb05vep7xbvj --- MANIFEST.in | 12 +- README | 155 ++++++++++++++++-- {doc => history}/Changelog | 0 {doc => history}/Changelog-4.x | 0 {doc => history}/Changelog-6.x | 0 {doc => history}/INSTALL | 0 {doc => history}/README.urpmi | 0 {doc => history}/README.userchange | 0 {tools => history}/change-loglevel.sh | 0 .../check_profile_l10n_all.py | 0 {sql => history}/clean-model.sql | 0 {tools => history}/gen_graph.sh | 0 {tools => history}/get-srvstats.sh | 0 {tools => history}/list-services.sh | 0 {doc => history}/migrate/3.3.0-3.4.0/README | 0 {doc => history}/migrate/3.3.0-3.4.0/post.py | 0 {doc => history}/migrate/3.3.0-3.4.0/pre.py | 0 {doc => history}/migrate/3.4.0-4.0.0/README | 0 .../migrate/3.4.0-4.0.0/post-tiny.py | 0 {doc => history}/migrate/3.4.0-4.0.0/post.py | 0 .../migrate/3.4.0-4.0.0/pre-tiny.py | 0 {doc => history}/migrate/3.4.0-4.0.0/pre.py | 0 {doc => history}/migrate/4.0.0-4.2.0/pre.py | 0 .../migrate/4.0.0-4.2.0/tiny/README | 0 .../migrate/4.0.0-4.2.0/tiny/pre-tiny.py | 0 {doc => history}/migrate/4.2.0-4.4.0/pre.py | 0 {tools => history}/module_graph.py | 0 {tools => history}/xml2yml.py | 0 {pixmaps => install}/openerp-header.bmp | Bin {pixmaps => install}/openerp-header.png | Bin {pixmaps => install}/openerp-icon.ico | Bin {pixmaps => install}/openerp-icon.png | Bin {man => install}/openerp-server.1 | 0 {doc => install}/openerp-server.conf | 0 {doc => install}/openerp-server.init | 0 {doc => install}/openerp-server.logrotate | 0 {pixmaps => install}/openerp.ico | Bin {pixmaps => install}/openerp.png | Bin {man => install}/openerp_serverrc.5 | 0 ssl-cert.cfg => install/ssl-cert.cfg | 0 openerp/addons/base/res/res_company.py | 4 +- .../addons/base/res/res_company_logo.png | Bin pixmaps/openerp-intro.bmp | Bin 154542 -> 0 bytes pixmaps/openerp-slogan.bmp | Bin 142054 -> 0 bytes setup.README | 27 --- setup.cfg | 2 +- setup.py | 71 +++----- rpminstall_sh.txt => setup_rpm.sh | 0 48 files changed, 170 insertions(+), 101 deletions(-) rename {doc => history}/Changelog (100%) rename {doc => history}/Changelog-4.x (100%) rename {doc => history}/Changelog-6.x (100%) rename {doc => history}/INSTALL (100%) rename {doc => history}/README.urpmi (100%) rename {doc => history}/README.userchange (100%) rename {tools => history}/change-loglevel.sh (100%) rename {doc/tests => history}/check_profile_l10n_all.py (100%) rename {sql => history}/clean-model.sql (100%) rename {tools => history}/gen_graph.sh (100%) rename {tools => history}/get-srvstats.sh (100%) rename {tools => history}/list-services.sh (100%) rename {doc => history}/migrate/3.3.0-3.4.0/README (100%) rename {doc => history}/migrate/3.3.0-3.4.0/post.py (100%) rename {doc => history}/migrate/3.3.0-3.4.0/pre.py (100%) rename {doc => history}/migrate/3.4.0-4.0.0/README (100%) rename {doc => history}/migrate/3.4.0-4.0.0/post-tiny.py (100%) rename {doc => history}/migrate/3.4.0-4.0.0/post.py (100%) rename {doc => history}/migrate/3.4.0-4.0.0/pre-tiny.py (100%) rename {doc => history}/migrate/3.4.0-4.0.0/pre.py (100%) rename {doc => history}/migrate/4.0.0-4.2.0/pre.py (100%) rename {doc => history}/migrate/4.0.0-4.2.0/tiny/README (100%) rename {doc => history}/migrate/4.0.0-4.2.0/tiny/pre-tiny.py (100%) rename {doc => history}/migrate/4.2.0-4.4.0/pre.py (100%) rename {tools => history}/module_graph.py (100%) rename {tools => history}/xml2yml.py (100%) rename {pixmaps => install}/openerp-header.bmp (100%) rename {pixmaps => install}/openerp-header.png (100%) rename {pixmaps => install}/openerp-icon.ico (100%) rename {pixmaps => install}/openerp-icon.png (100%) rename {man => install}/openerp-server.1 (100%) rename {doc => install}/openerp-server.conf (100%) rename {doc => install}/openerp-server.init (100%) rename {doc => install}/openerp-server.logrotate (100%) rename {pixmaps => install}/openerp.ico (100%) rename {pixmaps => install}/openerp.png (100%) rename {man => install}/openerp_serverrc.5 (100%) rename ssl-cert.cfg => install/ssl-cert.cfg (100%) rename pixmaps/your_logo.png => openerp/addons/base/res/res_company_logo.png (100%) delete mode 100644 pixmaps/openerp-intro.bmp delete mode 100644 pixmaps/openerp-slogan.bmp delete mode 100644 setup.README rename rpminstall_sh.txt => setup_rpm.sh (100%) diff --git a/MANIFEST.in b/MANIFEST.in index 6cd10b511cf..70715f18bc2 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,18 +1,12 @@ -include rpminstall_sh.txt # TODO do we need this file ? include README include LICENSE include MANIFEST.in include setup.nsi include setup.cfg -#include openerp/server.cert -#include openerp/server.pkey -#include openerp/gpl.txt -include man/openerp-server.1 -include man/openerp_serverrc.5 -recursive-include pixmaps *bmp *ico *png +include setup_rpm.sh recursive-include win32 *.py *.bat -recursive-include openerp *css *csv *html *png *po *pot -recursive-include openerp *rml *rng *sql *sxw *xml *xsl *yml +recursive-include openerp *css *csv *html *png *po *pot *rml *rng *sql *sxw *xml *xsl *yml +graft install graft debian graft doc global-exclude *pyc *~ # Exclude possible garbage from previous graft. diff --git a/README b/README index 5725ce9f866..a6fe10c8ffb 100644 --- a/README +++ b/README @@ -1,17 +1,138 @@ -About OpenERP ---------------- - -OpenERP is a free Enterprise Resource Planning and Customer Relationship -Management software. It is mainly developed to meet changing needs. - -The main functional features are: CRM & SRM, analytic and financial accounting, -double-entry stock management, sales and purchases management, tasks automation, -help desk, marketing campaign, ... and vertical modules for very specific -businesses. - -Technical features include a distributed server, flexible workflows, an object -database, dynamic GUIs, customizable reports, NET-RPC and XML-RPC interfaces, ... - -For more information, please visit: -http://www.openerp.com - +About OpenERP +------------- + +OpenERP is a free Enterprise Resource Planning and Customer Relationship +Management software. It is mainly developed to meet changing needs. + +The main functional features are: CRM & SRM, analytic and financial accounting, +double-entry stock management, sales and purchases management, tasks automation, +help desk, marketing campaign, ... and vertical modules for very specific +businesses. + +Technical features include a distributed server, flexible workflows, an object +database, dynamic GUIs, customizable reports, NET-RPC and XML-RPC interfaces, ... + +For more information, please visit: +http://www.openerp.com + +OpenERP Quick Installation Guide +--------------------------------- + +This file contains a quick guide to configure and install the OpenERP server. + +Required dependencies: +--------------------- + +You need the following software installed: + + * Python 2.5 or 2.6 + * Postgresql 8.2 or above + * Psycopg2 python module + * Reportlab pdf generation library for python + * lxml python module + * pytz python module + * PyYaml python module (install with: easy_install PyYaml) + +Some dependencies are only required for specific purposes: + +for rendering workflows graphs, you need: + * graphviz + * pyparsing + +For Luxembourg localization, you also need: + * pdftk (http://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/) + +for generating reports using non .jpg images, you need: + * Python Imaging Library for python + +For Debian-based distributions, the required packages can be installed with the +following command: + + #> apt-get install -y postgresql graphviz python-psycopg2 python-lxml python-tz python-imaging + +For Fedora +if they are not installed, install: +python and postgresql + +uses yum or you can recover required packages on fedora web site in "core" or "extra" repository : +postgresql-python +python-lxml +python-imaging +python-psycopg2 +python-reportlab +graphviz +You can find pyparsing at http://pyparsing.sourceforge.net/ + +1. Check that all the required dependencies are installed. + +2. Launch the program "python ./bin/openerp-server.py -r db_user -w db_password --db_host 127.0.0.1". +See the man page for more information about options. + +3. Connect to the server using the GUI client. And follow the instructions to create a new database. + +Installation Steps +------------------ + +1. Check that all the required dependencies are installed. + +2. Create a postgresql database. + +The default database name is "terp". If you want to use another name, you +will need to provide it when launching the server (by using the commandline +option --database). + +To create a postgresql database named "terp" using the following command: + $ createdb --encoding=UNICODE terp + +If it is the first time you use postgresql you might need to create a new user +to the postgres system using the following commands (where myusername is your +unix user name): + + $ su - + # su - postgres + $ createuser openerp + Shall the new user be allowed to create databases? (y/n) y + Shall the new user be allowed to create more new users? (y/n) y + CREATE USER + $ logout + # logout + +3. Launch service daemon by "service openerp-server start". + +The first time it is run, the server will initialise the database with all the default values. + +4. Connect to the server using the GUI client. + +There are two accounts by default: + * login: admin, password:admin + * login: demo, password:demo + +Some instructions to use setup.py for a user-install. +This file should/will be moved on a proper documentation place later. + + +- Possibly clean any left-over of the previous build. + > rm -rf dist openerp_server.egg-info + +- Possibly copy the addons in the server if we want them to be packaged + together: + > rsync -av --delete \ + --exclude .bzr/ \ + --exclude .bzrignore \ + --exclude /__init__.py \ + --exclude /base \ + --exclude /base_quality_interrogation.py \ + openerp/addons + +- Create the user-local directory where we want the package to be installed: + > mkdir -p /home/openerp/openerp-tmp/lib/python2.6/site-packages/ + +- Use --prefix to specify where the package is installed and include that + place in PYTHONPATH: + > PYTHONPATH=/home/openerp/openerp-tmp/lib/python2.6/site-packages/ \ + python setup.py install --prefix=/home/openerp/openerp-tmp + +- Run the main script, again specifying the PYTHONPATH: + > PYTHONPATH=/home/openerp/openerp-tmp/lib/python2.6/site-packages/ \ + /home/openerp/openerp-tmp/bin/openerp-server + diff --git a/doc/Changelog b/history/Changelog similarity index 100% rename from doc/Changelog rename to history/Changelog diff --git a/doc/Changelog-4.x b/history/Changelog-4.x similarity index 100% rename from doc/Changelog-4.x rename to history/Changelog-4.x diff --git a/doc/Changelog-6.x b/history/Changelog-6.x similarity index 100% rename from doc/Changelog-6.x rename to history/Changelog-6.x diff --git a/doc/INSTALL b/history/INSTALL similarity index 100% rename from doc/INSTALL rename to history/INSTALL diff --git a/doc/README.urpmi b/history/README.urpmi similarity index 100% rename from doc/README.urpmi rename to history/README.urpmi diff --git a/doc/README.userchange b/history/README.userchange similarity index 100% rename from doc/README.userchange rename to history/README.userchange diff --git a/tools/change-loglevel.sh b/history/change-loglevel.sh similarity index 100% rename from tools/change-loglevel.sh rename to history/change-loglevel.sh diff --git a/doc/tests/check_profile_l10n_all.py b/history/check_profile_l10n_all.py similarity index 100% rename from doc/tests/check_profile_l10n_all.py rename to history/check_profile_l10n_all.py diff --git a/sql/clean-model.sql b/history/clean-model.sql similarity index 100% rename from sql/clean-model.sql rename to history/clean-model.sql diff --git a/tools/gen_graph.sh b/history/gen_graph.sh similarity index 100% rename from tools/gen_graph.sh rename to history/gen_graph.sh diff --git a/tools/get-srvstats.sh b/history/get-srvstats.sh similarity index 100% rename from tools/get-srvstats.sh rename to history/get-srvstats.sh diff --git a/tools/list-services.sh b/history/list-services.sh similarity index 100% rename from tools/list-services.sh rename to history/list-services.sh diff --git a/doc/migrate/3.3.0-3.4.0/README b/history/migrate/3.3.0-3.4.0/README similarity index 100% rename from doc/migrate/3.3.0-3.4.0/README rename to history/migrate/3.3.0-3.4.0/README diff --git a/doc/migrate/3.3.0-3.4.0/post.py b/history/migrate/3.3.0-3.4.0/post.py similarity index 100% rename from doc/migrate/3.3.0-3.4.0/post.py rename to history/migrate/3.3.0-3.4.0/post.py diff --git a/doc/migrate/3.3.0-3.4.0/pre.py b/history/migrate/3.3.0-3.4.0/pre.py similarity index 100% rename from doc/migrate/3.3.0-3.4.0/pre.py rename to history/migrate/3.3.0-3.4.0/pre.py diff --git a/doc/migrate/3.4.0-4.0.0/README b/history/migrate/3.4.0-4.0.0/README similarity index 100% rename from doc/migrate/3.4.0-4.0.0/README rename to history/migrate/3.4.0-4.0.0/README diff --git a/doc/migrate/3.4.0-4.0.0/post-tiny.py b/history/migrate/3.4.0-4.0.0/post-tiny.py similarity index 100% rename from doc/migrate/3.4.0-4.0.0/post-tiny.py rename to history/migrate/3.4.0-4.0.0/post-tiny.py diff --git a/doc/migrate/3.4.0-4.0.0/post.py b/history/migrate/3.4.0-4.0.0/post.py similarity index 100% rename from doc/migrate/3.4.0-4.0.0/post.py rename to history/migrate/3.4.0-4.0.0/post.py diff --git a/doc/migrate/3.4.0-4.0.0/pre-tiny.py b/history/migrate/3.4.0-4.0.0/pre-tiny.py similarity index 100% rename from doc/migrate/3.4.0-4.0.0/pre-tiny.py rename to history/migrate/3.4.0-4.0.0/pre-tiny.py diff --git a/doc/migrate/3.4.0-4.0.0/pre.py b/history/migrate/3.4.0-4.0.0/pre.py similarity index 100% rename from doc/migrate/3.4.0-4.0.0/pre.py rename to history/migrate/3.4.0-4.0.0/pre.py diff --git a/doc/migrate/4.0.0-4.2.0/pre.py b/history/migrate/4.0.0-4.2.0/pre.py similarity index 100% rename from doc/migrate/4.0.0-4.2.0/pre.py rename to history/migrate/4.0.0-4.2.0/pre.py diff --git a/doc/migrate/4.0.0-4.2.0/tiny/README b/history/migrate/4.0.0-4.2.0/tiny/README similarity index 100% rename from doc/migrate/4.0.0-4.2.0/tiny/README rename to history/migrate/4.0.0-4.2.0/tiny/README diff --git a/doc/migrate/4.0.0-4.2.0/tiny/pre-tiny.py b/history/migrate/4.0.0-4.2.0/tiny/pre-tiny.py similarity index 100% rename from doc/migrate/4.0.0-4.2.0/tiny/pre-tiny.py rename to history/migrate/4.0.0-4.2.0/tiny/pre-tiny.py diff --git a/doc/migrate/4.2.0-4.4.0/pre.py b/history/migrate/4.2.0-4.4.0/pre.py similarity index 100% rename from doc/migrate/4.2.0-4.4.0/pre.py rename to history/migrate/4.2.0-4.4.0/pre.py diff --git a/tools/module_graph.py b/history/module_graph.py similarity index 100% rename from tools/module_graph.py rename to history/module_graph.py diff --git a/tools/xml2yml.py b/history/xml2yml.py similarity index 100% rename from tools/xml2yml.py rename to history/xml2yml.py diff --git a/pixmaps/openerp-header.bmp b/install/openerp-header.bmp similarity index 100% rename from pixmaps/openerp-header.bmp rename to install/openerp-header.bmp diff --git a/pixmaps/openerp-header.png b/install/openerp-header.png similarity index 100% rename from pixmaps/openerp-header.png rename to install/openerp-header.png diff --git a/pixmaps/openerp-icon.ico b/install/openerp-icon.ico similarity index 100% rename from pixmaps/openerp-icon.ico rename to install/openerp-icon.ico diff --git a/pixmaps/openerp-icon.png b/install/openerp-icon.png similarity index 100% rename from pixmaps/openerp-icon.png rename to install/openerp-icon.png diff --git a/man/openerp-server.1 b/install/openerp-server.1 similarity index 100% rename from man/openerp-server.1 rename to install/openerp-server.1 diff --git a/doc/openerp-server.conf b/install/openerp-server.conf similarity index 100% rename from doc/openerp-server.conf rename to install/openerp-server.conf diff --git a/doc/openerp-server.init b/install/openerp-server.init similarity index 100% rename from doc/openerp-server.init rename to install/openerp-server.init diff --git a/doc/openerp-server.logrotate b/install/openerp-server.logrotate similarity index 100% rename from doc/openerp-server.logrotate rename to install/openerp-server.logrotate diff --git a/pixmaps/openerp.ico b/install/openerp.ico similarity index 100% rename from pixmaps/openerp.ico rename to install/openerp.ico diff --git a/pixmaps/openerp.png b/install/openerp.png similarity index 100% rename from pixmaps/openerp.png rename to install/openerp.png diff --git a/man/openerp_serverrc.5 b/install/openerp_serverrc.5 similarity index 100% rename from man/openerp_serverrc.5 rename to install/openerp_serverrc.5 diff --git a/ssl-cert.cfg b/install/ssl-cert.cfg similarity index 100% rename from ssl-cert.cfg rename to install/ssl-cert.cfg diff --git a/openerp/addons/base/res/res_company.py b/openerp/addons/base/res/res_company.py index dc07b55a78e..51d796a3a1e 100644 --- a/openerp/addons/base/res/res_company.py +++ b/openerp/addons/base/res/res_company.py @@ -245,9 +245,7 @@ class res_company(osv.osv): return False def _get_logo(self, cr, uid, ids): - return open(os.path.join( - tools.config['root_path'], '..', 'pixmaps', 'your_logo.png'), - 'rb') .read().encode('base64') + return open(os.path.join( tools.config['root_path'], 'addons', 'base', 'res', 'res_company_logo.png'), 'rb') .read().encode('base64') _header = """
diff --git a/pixmaps/your_logo.png b/openerp/addons/base/res/res_company_logo.png similarity index 100% rename from pixmaps/your_logo.png rename to openerp/addons/base/res/res_company_logo.png diff --git a/pixmaps/openerp-intro.bmp b/pixmaps/openerp-intro.bmp deleted file mode 100644 index 8d3c9340c9b929dd4837f6fbc93a96e5ffa02bc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154542 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 X03?6`YYEAK8RIXPzgXb^s|EfKgFv}o diff --git a/pixmaps/openerp-slogan.bmp b/pixmaps/openerp-slogan.bmp deleted file mode 100644 index a3cffd104f2b29c17f82a452d7503df0cdc576a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142054 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

-+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 rm -rf dist openerp_server.egg-info - -- Possibly copy the addons in the server if we want them to be packaged - together: - > rsync -av --delete \ - --exclude .bzr/ \ - --exclude .bzrignore \ - --exclude /__init__.py \ - --exclude /base \ - --exclude /base_quality_interrogation.py \ - openerp/addons - -- Create the user-local directory where we want the package to be installed: - > mkdir -p /home/openerp/openerp-tmp/lib/python2.6/site-packages/ - -- Use --prefix to specify where the package is installed and include that - place in PYTHONPATH: - > PYTHONPATH=/home/openerp/openerp-tmp/lib/python2.6/site-packages/ \ - python setup.py install --prefix=/home/openerp/openerp-tmp - -- Run the main script, again specifying the PYTHONPATH: - > PYTHONPATH=/home/openerp/openerp-tmp/lib/python2.6/site-packages/ \ - /home/openerp/openerp-tmp/bin/openerp-server diff --git a/setup.cfg b/setup.cfg index 483eb2f22e1..2f64223e455 100644 --- a/setup.cfg +++ b/setup.cfg @@ -17,4 +17,4 @@ requires=python >= 2.5 # Need to overwrite the install-part of the RPM to patch # the filenames of the man pages. -install_script=rpminstall_sh.txt +install_script=setup_rpm.sh diff --git a/setup.py b/setup.py index 94c3cf50a92..9595c1a9257 100755 --- a/setup.py +++ b/setup.py @@ -20,15 +20,12 @@ # ############################################################################## -import os, sys -import os +import glob, os, re, setuptools, sys from os.path import join, isfile -import glob -from setuptools import setup, find_packages +execfile(join('openerp', 'release.py')) py2exe_keywords = {} -py2exe_data_files = [] if os.name == 'nt': import py2exe py2exe_keywords['console'] = [ @@ -52,37 +49,30 @@ if os.name == 'nt': "excludes" : ["Tkconstants","Tkinter","tcl"], } } - # TODO is it still necessary now that we don't use the library.zip file? - def data_files(): - '''For Windows, we consider all the addons as data files. - It seems also that package_data below isn't honored by py2exe.''' - files = [] - os.chdir('openerp') - for (dp, dn, names) in os.walk('addons'): - files.append((join('openerp',dp), map(lambda x: join('openerp', dp, x), names))) - os.chdir('..') - files.append(('openerp', [join('openerp', 'import_xml.rng'),])) - # copy pytz/timzeone - # TODO check if we have to also copy dateutil's timezone data. - import pytz - # Make sure the layout of pytz hasn't changed - assert (pytz.__file__.endswith('__init__.pyc') or - pytz.__file__.endswith('__init__.py')), pytz.__file__ - pytz_dir = os.path.dirname(pytz.__file__) +# List all data files +def data(): + files = [] + for root, dirnames, filenames in os.walk('openerp'): + for filename in filenames: + if not re.match(r'.*(\.pyc|\.pyo|\~)$',filename): + files.append(os.path.join(root, filename)) + d = {} + for v in files: + k=os.path.dirname(v) + if k in d: + d[k].append(v) + else: + d[k]=[v] + r = d.items() + return r - saved_dir = os.getcwd() - os.chdir(pytz_dir) - for dp, dn, names in os.walk('zoneinfo'): - files.append((join('pytz',dp), map(lambda x: join(pytz_dir, dp, x), names))) - os.chdir(saved_dir) +def gen_manifest(): + file_list="\n".join(data()) + open('MANIFEST','w').write(file_list) - return files - py2exe_data_files = data_files() - -execfile(join('openerp', 'release.py')) - -setup(name = name, +setuptools.setup( + name = name, version = version, description = description, long_description = long_desc, @@ -91,18 +81,10 @@ setup(name = name, author_email = author_email, classifiers = filter(None, classifiers.split("\n")), license = license, - data_files = [ - (join('man', 'man1'), ['man/openerp-server.1']), - (join('man', 'man5'), ['man/openerp_serverrc.5']), - ('doc', filter(isfile, glob.glob('doc/*'))), - ] + py2exe_data_files, scripts = ['openerp-server'], - packages = find_packages(), - include_package_data = True, - package_data = { - '': ['*.yml', '*.xml', '*.po', '*.pot', '*.csv'], - }, - dependency_links = ['http://download.gna.org/pychart/'], + data_files = data(), + packages = setuptools.find_packages(), + #include_package_data = True, install_requires = [ # We require the same version as caldav for lxml. 'lxml==2.1.5', @@ -114,6 +96,7 @@ setup(name = name, # It is probably safe to move to PyChart 1.39 (the latest one). # (Let setup.py choose the latest one, and we should check we can remove pychart from # our tree.) + # http://download.gna.org/pychart/ 'pychart', 'pydot', 'pytz', diff --git a/rpminstall_sh.txt b/setup_rpm.sh similarity index 100% rename from rpminstall_sh.txt rename to setup_rpm.sh