Compiling Python 2.7.10 and pip commands

#See https://adrhc.go.ro/wordpress/common-commands-when-building/ for building environment, x.sh script and other things not defined here.
#Before starting do declare the environment variables specified to the link above.

#Compiling Python-2.7.10
export CFLAGS="-march=armv5te -mfloat-abi=soft -mabi=aapcs-linux -fno-stack-protector -pthread -O2 -Wall -Wno-error"
#export BUILD_FLAGS="$CFLAGS -I/ffp/include -I/ffp/opt/apache-2.2.29-worker/include"
export BUILD_FLAGS="$CFLAGS -I/ffp/include"
export LIBS="-lintl -lreadline -lncurses"
export LDFLAGS="-L/ffp/lib $LIBS"
export CPPFLAGS="$BUILD_FLAGS"
export CXXFLAGS="$BUILD_FLAGS"
export PATH=/ffp/sbin:/ffp/bin

NEW_BUILD_NAME=Python
NEW_BUILD_VER=2.7.10
NEW_BUILD_NAME_AND_VER=$NEW_BUILD_NAME-$NEW_BUILD_VER
ls -l /tmp/$NEW_BUILD_NAME-*
ls -l ~/ffp_0.7_armv5/packages/$NEW_BUILD_NAME-*
NEW_BUILD_NR=0

#ERROR
	Failed to build these modules:
	_curses_panel      readline
#SOLUTION (before configure)
	use -lreadline -lncurses for BUILD_FLAGS and LDFLAGS

#ERROR (make)
	export PATH=/ffp/sbin:/ffp/bin
	/ffp/bin/mkdir -p Include
	./Parser/asdl_c.py -h Include ./Parser/Python.asdl
	/ffp/bin/env: python: No such file or directory
	make: *** [Include/Python-ast.h] Error 127
#SOLUTION (apply before configure)
	#somehow python uses the existing version of python (any) to compile itself (current sources)
	#force to ignore the existing version of python when building itself:
	touch Include/Python-ast.h Python/Python-ast.c

#ERROR (test after installing)
	cd ~/temp/$NEW_BUILD_NAME_AND_VER
	ffp/bin/python
	Python 2.7.9 (default, Jan 11 2015, 18:08:14)
	[GCC 4.9.2] on linux2
	Type "help", "copyright", "credits" or "license" for more information.
	>>> help('modules')
	Please wait a moment while I gather a list of all available modules...
	ffp/bin/python: symbol '_PyErr_ReplaceException': can't resolve symbol
#SOLUTION (apply before configure)
	#See http://bugs.python.org/issue23781.
	wget http://bugs.python.org/file38697/capi_PyErr_ReplaceException.patch
	#modify capi_PyErr_ReplaceException.patch (remove a/ and b/ source path prefixes)
	#apply capi_PyErr_ReplaceException.patch accepting all defaults
	patch -p0 -i capi_PyErr_ReplaceException.patch

cd ~/compile/$NEW_BUILD_NAME_AND_VER
patch -p0 -i capi_PyErr_ReplaceException.patch
touch Include/Python-ast.h Python/Python-ast.c
#./configure --prefix=/ffp --enable-shared --enable-ipv6 --enable-big-digits --enable-unicode --with-signal-module --with-threads=/ffp --with-pth --with-doc-strings --without-pymalloc --with-fpectl --with-ensurepip=upgrade
#configure without pip; better install manually pip-6.0.6 in order to avoid CERTIFICATE_VERIFY_FAILED error when running pip
./configure --prefix=/ffp --enable-shared --enable-ipv6 --enable-big-digits --enable-unicode --with-signal-module --with-threads=/ffp --with-pth --with-doc-strings --without-pymalloc --with-fpectl

#ERROR (before make)
	./Parser/asdl_c.py -h Include ./Parser/Python.asdl
	/ram_bin/usr/bin/python: /ffp/lib/libpthread.so.0: no version information available (required by /usr/lib/libpython2.6.so.1.0)
	make: *** [Include/Python-ast.h] Segmentation fault (core dumped)
#SOLUTION
	touch Include/Python-ast.h Python/Python-ast.c

#ERROR (before make)
	Failed to build these modules:
	_curses_panel
#SOLUTION
	slacker -u br2:ncurses-5.9_20140927-arm-1.txz

touch Include/Python-ast.h Python/Python-ast.c
nohup /ffp/bin/make -C . &
tail -f nohup.out

#ERROR (after make)
	Python build finished, but the necessary bits to build these modules were not found:
	_tkinter           bsddb185           nis
	sunaudiodev
	To find the necessary bits, look in setup.py in detect_modules() for the module's name.
#SOLUTION
	This means won't build the following modules (is ok):
	_tkinter (requires X11 libraries), bsddb185 (Berkeley DB 1.85 library), nis (Interface to Sun’s NIS), sunaudiodev (Access to Sun audio hardware)

rm /tmp/$NEW_BUILD_NAME-$NEW_BUILD_VER-arm-$NEW_BUILD_NR.txz
rm -r $HOME/temp/$NEW_BUILD_NAME_AND_VER
make install DESTDIR=$HOME/temp/$NEW_BUILD_NAME_AND_VER
cd $HOME/temp/$NEW_BUILD_NAME_AND_VER
makepkg $NEW_BUILD_NAME $NEW_BUILD_VER $NEW_BUILD_NR
cp -v /tmp/$NEW_BUILD_NAME-$NEW_BUILD_VER-arm-$NEW_BUILD_NR.txz ~/ffp_0.7_armv5/packages/
funpkg -q $NEW_BUILD_NAME
funpkg -i ~/ffp_0.7_armv5/packages/$NEW_BUILD_NAME-$NEW_BUILD_VER-arm-$NEW_BUILD_NR.txz

#From now on RESTORE ENVIRONMENT to that specified at https://adrhc.go.ro/wordpress/common-commands-when-building:
export CFLAGS="-march=armv5te -mfloat-abi=soft -mabi=aapcs-linux -fno-stack-protector -pthread -O2 -Wall -Wno-error"
export BUILD_FLAGS="$CFLAGS -I/ffp/include"
unset LIBS
export LDFLAGS="-L/ffp/lib"
export CPPFLAGS="$BUILD_FLAGS"
export CXXFLAGS="$BUILD_FLAGS"

#In order to avoid CERTIFICATE_VERIFY_FAILED when using easy_install (provided by setuptools module)
#download the Mozilla's CA Bundle certificate:
wget -nv http://curl.haxx.se/ca/cacert.pem -O /ffp/etc/ssl/cert.pem

#You could use easy_install (provided by setuptools module) in order to install modules (or simply use pip).
#When using pip and required to use the "--egg" option than you better compile the module manually.
#see http://forum.nas-central.org/viewtopic.php?f=249&t=16627&p=92309#p92309

#List python modules:
python
#then, from python's shell/prompt:
help('modules')
help('setuptools') -> info about setuptools module
help('jinja2') -> info about jinja2 module (observe lower case usage)

#ERROR (la instalarea multor pachete)
	AttributeError: Distribution instance has no attribute 'include_package_data'
#SOLUTION
	Nu instala setuptools folosind:
	wget https://bitbucket.org/pypa/setuptools/get/default.tar.gz#egg=setuptools-dev

#Install setuptools-17.0
cd ~/compile
wget https://pypi.python.org/packages/source/s/setuptools/setuptools-17.0.tar.gz#md5=fd15d24ed1e4c95e56d8c6e812f3a84f
tar xvzf setuptools-17.0.tar.gz
cd setuptools-17.0
~/x.sh ffpg
python setup.py --help-commands
python setup.py --help
python setup.py --help build
python setup.py build
python setup.py install --record module-files.txt

#Install pip-7.0.3 (requires setuptools-17.0).
#pip-7.0.3 has no CERTIFICATE_VERIFY_FAILED error
cd ~/compile
wget https://pypi.python.org/packages/source/p/pip/pip-7.0.3.tar.gz#md5=54cbf5ae000fb3af3367345f5d299d1c
tar xvzf pip-7.0.3.tar.gz
cd pip-7.0.3
~/x.sh ffpg
python setup.py --help-commands
python setup.py --help
python setup.py --help build
python setup.py build
python setup.py install --record module-files.txt

#Install SCons (better compile manually SCons because its files have non-FFP paths)
#SCons install doesn't work without --egg option.
#see also http://forum.nas-central.org/viewtopic.php?f=249&t=16627&p=92309#p92309
pip install SCons -vvv --egg --log /ffp/var/log/python/SCons.txt
#Modify the paths used by /ffp/bin/scons* files.
sed -i s/"\/usr\/bin"/"\/ffp\/bin"/ /ffp/bin/scons-time-2.3.0
sed -i s/"\/usr\/bin"/"\/ffp\/bin"/ /ffp/bin/scons-time
sed -i s/"\/usr\/bin"/"\/ffp\/bin"/ /ffp/bin/scons-2.3.0
sed -i s/"\/usr\/bin"/"\/ffp\/bin"/ /ffp/bin/sconsign-2.3.0
sed -i s/"\/usr\/bin"/"\/ffp\/bin"/ /ffp/bin/sconsign
sed -i s/"\/usr\/bin"/"\/ffp\/bin"/ /ffp/bin/scons
cd /ffp/lib/scons-2.3.0
~/x.sh ffpg

#Install Jinja2-2.7.3
cd ~/compile
wget https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.7.3.tar.gz
tar xvzf Jinja2-2.7.3.tar.gz
cd Jinja2-2.7.3
~/x.sh ffpg
python setup.py --help-commands
python setup.py --help
python setup.py --help build
python setup.py build
python setup.py install --record module-files.txt

#Uninstall a python module
cd ~/compile/pip-1.2.1 -> has CERTIFICATE_VERIFY_FAILED error at install
cd ~/compile/pip-1.5.6 -> has CERTIFICATE_VERIFY_FAILED error always
cd ~/compile/pip-6.0.6 -> has no CERTIFICATE_VERIFY_FAILED error
cat module-files.txt | xargs rm -rf
find /ffp/lib/python2.7/ -name "*pip*"
rm -r /ffp/lib/python2.7/site-packages/pip-6.0.6-py2.7.egg

#Using pip:
python -m pip help
python -m pip list
#varianta cu freeze e o listare care arata si eventualele probleme ale pachetelor
python -m pip freeze
python -m pip help install
python -m pip search simplejson
python -m pip install simplejson -> nu a functionat
python -m pip install cryptography==0.6.1
python -m pip install pyOpenSSL==0.14 -vvv --log /ffp/var/log/python/pyOpenSSL-0.14.txt
python -m pip list --outdated
python -m pip install -U CherryPy -> updating CherryPy
pip install -U setuptools -v --log /ffp/var/log/python/setuptools -> updating CherryPy and recording in log
python -m pip install rst2html5 -> required by aria2
python -m pip uninstall pycurl
pip install pycurl -v --log /ffp/var/log/python/pycurl.txt
pip install PIL --allow-unverified PIL
# install yenc with allow-all-external and "--allow-unverified yenc"
pip install --allow-all-external --allow-unverified yenc yenc -v --log /ffp/var/log/python/yenc
# install from archive url
pip install -v --log /ffp/var/log/python/yenc http://www.golug.it/pub/yenc/yenc-0.4.0.tar.gz

#List module's files:
pip show -f Jinja2

#show sys.path -> python packages paths
python -m site
python -m site --user-site

#Install pycurl-7.19.5 -> required by pyLoad and easier to install using pip or easy_install (from setuptools)
cd ~/compile
wget http://pycurl.sourceforge.net/download/pycurl-7.19.5.tar.gz
tar xvzf pycurl-7.19.5.tar.gz
cd pycurl-7.19.5
~/x.sh ffpg
python setup.py --help-commands
python setup.py --help

#ERROR0
	python: symbol 'CRYPTO_set_locking_callback': can't resolve symbol
	python: symbol 'CRYPTO_num_locks': can't resolve symbol
	python: symbol 'CRYPTO_set_id_callback': can't resolve symbol
	Traceback (most recent call last):
	File "<stdin>", line 1, in <module>
	ImportError: unknown dlopen() error
#SOLUTION0
	Nu compila cu openssl:
	python setup.py build --curl-config=/ffp/bin/curl-config --with-ssl --openssl-dir=/ffp
	Modifica setup.py:
	# self.libraries = []
	self.libraries = ["crypto"]

python setup.py build --curl-config=/ffp/bin/curl-config --with-ssl
python setup.py install --record module-files.txt
#test installation:
python
import pycurl
CTRL+D

#certifi (14.5.14)	-> required in order to avoid CERTIFICATE_VERIFY_FAILED when using easy_install (from setuptools)
#pip (6.0.6)		-> required version in order to avoid CERTIFICATE_VERIFY_FAILED error when running pip

#Requirements files are used to hold the result from pip freeze for the purpose of achieving repeatable installations. 
#In this case, your requirement file contains a pinned version of everything that was installed when pip freeze was run.
pip freeze > /ffp/opt/apache-htdocs/public/python2.7-packages.txt
pip install -r /ffp/opt/apache-htdocs/public/python2.7-packages.txt

#ecdsa module below must be corrected after installation:
cd /ffp/lib/python2.7/site-packages/ecdsa
ffpg

# pip freeze
certifi==2015.4.28
cffi==1.1.2
Cheetah==2.4.4
CherryPy==3.7.0
cryptography==0.9.3
enum34==1.0.4
Flask==0.10.1
idna==2.0
ipaddress==1.0.14
itsdangerous==0.24
Jinja2==2.8
Markdown==2.6.2
MarkupSafe==0.23
peewee==2.6.3
pyasn1==0.1.8
pycparser==2.14
pycurl==7.19.5.1
pyOpenSSL==0.15.1
requests==2.7.0
six==1.9.0
snor==0.0.8
transmissionrpc==0.11
Werkzeug==0.10.4
yenc==0.4.0

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.