2017-05-31 5 views
0

Ich möchte eine tar.gz Datei mit einer vollständigen Miniconda Installation erstellen, einschließlich einiger Pakete, um es auf Offline-Maschinen zu verteilen. Diese tar.gz wird mit einem RPM installiert.Reallocate full Conda Installation

Ich habe versucht, alles tun zu packen:

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 

Dann erstelle ich eine .spec-Datei, die den Inhalt aller extrahiert. Das ist die Struktur von rpmbuild Verzeichnis:

[[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 

.spec Datei

%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 

Und wenn ich versuche, die Drehzahl zu installieren, schlägt fehl:

[[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 

Antwort

0

ich war in der Lage, es zu tun . Hier ist meine .spec Datei

%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 

Dies ist das Installationsskript.

[[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 

Und das sind die Abhängigkeiten von meinem Projekt:

@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