2017-05-31 1 views
0

Je souhaite créer un fichier tar.gz avec une installation complète de Miniconda, y compris des packages pour pouvoir le distribuer sur des machines hors ligne. Ce tar.gz sera installé avec un RPM.Réallocation de l'installation complète de Conda

J'ai essayé d'emballer tout faire:

sudo sh miniconda.sh -b -p /opt/miniconda 
sudo /opt/miniconda/bin/conda create -p /opt/miniconda/envs --file packages.txt 
tar -czf miniconda.tar.gz /opt/miniconda 

Puis-je créer un fichier .spec qui extrait tout le contenu. Ceci est la structure du répertoire rpmbuild:

[[email protected] rpmbuild]$ tree -L 5 
. 
├── BUILD 
├── BUILDROOT 
├── RPMS 
│   └── x86_64 
│    └── foo-1.0-1.x86_64.rpm 
├── SOURCES 
│   ├── foo-1.0 
│   │   └── opt 
│   │    └── miniconda 
│   │     ├── bin 
│   │     ├── conda-meta 
│   │     ├── envs 
│   │     ├── etc 
│   │     ├── include 
│   │     ├── lib 
│   │     ├── LICENSE.txt 
│   │     ├── pkgs 
│   │     ├── share 
│   │     └── ssl 
│   └── foo-1.0.tar.gz 
├── SPECS 
│   └── foo.spec 
└── SRPMS 
    └── foo-1.0-1.src.rpm 

fichier .spec

%define  __spec_install_post %{nil} 
%define   debug_package %{nil} 
%define  __os_install_post %{_dbpath}/brp-compress 

Summary: Trying to distribute miniconda 
Name: foo 
Version: 1.0 
Release: 1 
License: GPL+ 
Group: Development/Tools 
SOURCE0 : %{name}-%{version}.tar.gz 
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root 

%description 
"Here's the description" 

%prep 
%setup -q 

%build 
# Nothing 

%install 
rm -rf %{buildroot} 
mkdir -p %{buildroot} 
cp -a * %{buildroot} 

%clean 
rm -rf %{buildroot} 

%files 
%defattr(-,root,root,-) 
/opt/miniconda 

%changelog 

Et quand je tente d'installer le régime, il échoue:

[[email protected] rpmbuild]$ sudo yum localinstall ./RPMS/x86_64/foo-1.0-1.x86_64.rpm 
[sudo] password for user: 
Loaded plugins: langpacks, product-id, rhnplugin, search-disabled-repos, subscription-manager 
This system is receiving updates from RHN Classic or Red Hat Satellite. 
Examining ./RPMS/x86_64/foo-1.0-1.x86_64.rpm: foo-1.0-1.x86_64 
Marking ./RPMS/x86_64/foo-1.0-1.x86_64.rpm to be installed 
Resolving Dependencies 
--> Running transaction check 
---> Package foo.x86_64 0:1.0-1 will be installed 
--> Processing Dependency: /opt/anaconda1anaconda2anaconda3/bin/python for package: foo-1.0-1.x86_64 


One of the configured repositories failed (Unknown), 
and yum doesn't have enough cached data to continue. At this point the only 
safe thing yum can do is fail. There are a few ways to work "fix" this: 

    1. Contact the upstream for the repository and get them to fix the problem. 

    2. Reconfigure the baseurl/etc. for the repository, to point to a working 
     upstream. This is most often useful if you are using a newer 
     distribution release than is supported by the repository (and the 
     packages for the previous distribution release still work). 

    3. Run the command with the repository temporarily disabled 
      yum --disablerepo=<repoid> ... 

    4. Disable the repository permanently, so yum won't use it by default. Yum 
     will then just ignore the repository until you permanently enable it 
     again or use --enablerepo for temporary usage: 

      yum-config-manager --disable <repoid> 
     or 
      subscription-manager repos --disable=<repoid> 

    5. Configure the failing repository to be skipped, if it is unavailable. 
     Note that yum will try to contact the repo. when it runs most commands, 
     so will have to try and fail each time (and thus. yum will be be much 
     slower). If it is a very temporary problem though, this is often a nice 
     compromise: 

      yum-config-manager --save --setopt=<repoid>.skip_if_unavailable=true 

Cannot retrieve metalink for repository: epel/x86_64. Please verify its path and try again 

Répondre

0

j'ai pu le faire . Voici mon fichier .spec

%define  __spec_install_post %{nil} 
%define   debug_package %{nil} 
%define  __os_install_post %{_dbpath}/brp-compress 

%define tarversion foo-1.0 
%define tarfile %{tarversion}.tar.gz 
%define installscript install.sh 

Summary: Trying to distribute miniconda 
Name: foo 
Version: 1.0 
Release: 1 
License: GPL+ 
Group: Development/Tools 
SOURCE1 : %{name}-%{version}.tar.gz 
SOURCE2 : %{installscript} 
BuildRoot: %{_builddir}/%{name}-root 

%description 
%{summary} 

%prep 

%build 
# Nothing 

%install 

mkdir -p %{buildroot}%{_bindir} 
cp -a %{SOURCE1} %{SOURCE2} %{buildroot}%{_bindir}/ 
chmod a+x %{buildroot}%{_bindir}/%{installscript} 

%clean 
rm -rf %{buildroot} 

%files 
%{_bindir}/%{installscript} 
%{_bindir}/%{tarfile} 

%pre 
echo "Deleting old miniconda installation..." 
rm -rf /opt/miniconda 

%preun 
echo "Deleting old miniconda installation..." 
rm -rf /opt/miniconda 

%post 
%{_bindir}/%{installscript} 
rm -rf /tmp/dependencies 
rm /tmp/miniconda.sh 
rm /tmp/packages.txt 

if [ -f /opt/miniconda/bin/python ]; then 
    echo "Python is there!" 
    echo "Checking version..." 

    python_version="$(/opt/miniconda/bin/python --version)" 
    if [[ "3.6.0" =~ "$python_version" ]]; then 
     echo "Python version is correct: $python_version" 
    else 
     echo "ERROR: Python version is not correct" 
     exit 1 
    fi 

    echo "Checking numpy version..." 
    numpy_version="$(/opt/miniconda/envs/MyEnv/bin/python -c 'import numpy; print(numpy.__version__)')" 
    if [ "$numpy_version" == "1.12.1" ]; then 
     echo "Numpy version is correct: $numpy_version" 
    else 
     echo "ERROR: Numpy version is not correct" 
     exit 1 
    fi 

    echo "Checking scipy version..." 
    scipy_version="$(/opt/miniconda/envs/MyEnv/bin/python -c 'import scipy; print(scipy.__version__)')" 
    if [ "$scipy_version" == "0.19.0" ]; then 
     echo "Scipy version is correct: $scipy_version" 
    else 
    echo "ERROR: Scipy version is not correct" 
     exit 1 
    fi 

    echo "Checking scikit-learn version..." 
    scikit_version="$(/opt/miniconda/envs/MyEnv/bin/python -c 'import sklearn; print(sklearn.__version__)')" 
    if [ "$scikit_version" == "0.18.1" ]; then 
     echo "Scikit-learn version is correct: $scikit_version" 
    else 
     echo "ERROR: scikit-learn version is not correct" 
     exit 1 
    fi 
else 
    echo "ERROR: Miniconda Python installation was not found." 
    exit 1 
fi 

Ceci est le script d'installation.

[[email protected] SOURCES]$ cat install.sh 
#!/bin/bash 
echo "Extracting dependencies..." 
tar -zvxf /usr/bin/foo-1.0.tar.gz -C /tmp 
echo "Installing Miniconda..." 
sudo sh /tmp/miniconda.sh -b -p /opt/miniconda 
echo "Creating environment..." 
sudo /opt/miniconda/bin/conda create -p /opt/miniconda/envs/MyEnv --file /tmp/packages.txt 

Et ce sont les dépendances de mon projet:

@EXPLICIT 
file:///tmp/dependencies/libgfortran-3.0.0-1.tar.bz2 
file:///tmp/dependencies/mkl-2017.0.1-0.tar.bz2 
file:///tmp/dependencies/numpy-1.12.1-py36_0.tar.bz2 
file:///tmp/dependencies/openssl-1.0.2k-2.tar.bz2 
file:///tmp/dependencies/pip-9.0.1-py36_1.tar.bz2 
file:///tmp/dependencies/python-3.6.0-0.tar.bz2 
file:///tmp/dependencies/readline-6.2-2.tar.bz2 
file:///tmp/dependencies/scikit-learn-0.18.1-np112py36_1.tar.bz2 
file:///tmp/dependencies/scipy-0.19.0-np112py36_0.tar.bz2 
file:///tmp/dependencies/setuptools-27.2.0-py36_0.tar.bz2 
file:///tmp/dependencies/sqlite-3.13.0-0.tar.bz2 
file:///tmp/dependencies/tk-8.5.18-0.tar.bz2 
file:///tmp/dependencies/wheel-0.29.0-py36_0.tar.bz2 
file:///tmp/dependencies/xz-5.2.2-1.tar.bz2 
file:///tmp/dependencies/zlib-1.2.8-3.tar.bz2