-
-
Save SkymeFactor/bc29a2534d3c5036af50fa0dd06ea703 to your computer and use it in GitHub Desktop.
#!/bin/bash | |
# 1. Install "Development tools" from remote repo | |
dnf groupinstall -y "Development Tools" | |
# Will be important later | |
dnf install -y rpm-build | |
# 2. Install bastet from source | |
# Mount host sharefolder which contains fortunes, checkinstall and bastet as is | |
mount -t vboxsf ShFolder /mnt | |
# Copy bastet to $pwd | |
cp /mnt/bastet-0.43.tgz ./ | |
# Extract bastet-0.43.tgz | |
tar -zxf bastet-0.43.tgz | |
# Move to the bastet folder | |
cd ./bastet-0.43 | |
# Make sure that all dependencies are satisfied | |
dnf install -y boost boost-thread boost-devel ncurses-devel | |
# Make the executable file "bastet" | |
make | |
# Run bastet to make sure it's ok | |
./bastet | |
# Change makefile and add install option | |
patch ./Makefile << EOF | |
@@ -22,2 +21,7 @@ | |
mrproper: clean | |
rm -f *~ | |
+ | |
+install: clean all | |
+ cp bastet /usr/bin | |
+ chmod a+x /usr/bin/bastet | |
+ | |
EOF | |
#echo -e "install: clean all\n\tcp bastet /usr/bin\n\tchmod a+x /usr/bin/bastet\n" >> Makefile | |
# Check the proper installation: | |
make install | |
ls -l /usr/bin | grep bastet | |
# Results: -rwxr-x--x. 1 root root 718104 Nov 26 15:37 bastet | |
cd ~/ | |
# 3. List all installed packages into task3.log file | |
dnf list installed > task3.log | |
# 4. List all dependencies of gcc package into task4_1.log file | |
dnf repoquery --requires gcc > task4_1.log | |
# List all reverse-dependencies for libgcc package into task4_2.log | |
dnf repoquery --whatrequires libgcc > task4_2.log | |
# Local only: rpm --query --whatrequires libgcc | |
# 5. Create localrepo/ folder within root home | |
mkdir /root/localrepo/ | |
# Copy checkinstall package into there | |
cp /mnt/checkinstall-1.6.2-3.el6.1.x86_64.rpm /root/localrepo/ | |
# Make sure that createrepo package is installed | |
dnf install -y createrepo | |
# Create the local repository localrepo | |
createrepo /root/localrepo/ | |
# Make .repo file within /etc/yum.repos.d/ | |
echo "[localrepo] | |
name=LocalRepository | |
baseurl=file:///root/localrepo/ | |
enabled=1 | |
gpgcheck=0 | |
" > /etc/yum.repos.d/localrepo.repo | |
# 6. List all available repos into task6.log | |
dnf repolist > task6.log | |
# Result: | |
# repo id repo name | |
# AppStream CentOS-8 - AppStream | |
# BaseOS CentOS-8 - Base | |
# extras CentOS-8 - Extras | |
# localrepo LocalRepository | |
# 7. Make all external repositories invisible for dnf | |
for file in $(ls /etc/yum.repos.d/) | |
do | |
[[ "${file}" != "localrepo.repo" ]] && mv /etc/yum.repos.d/${file} /etc/yum.repos.d/${file}_bad | |
done | |
dnf clean all | |
# List all available packages | |
dnf list available | |
# Result: | |
# Last metadata expiration check: 0:00:44 ago on Thu 26 Nov 2020 08:50:22 PM EST. | |
# Available Packages | |
# checkinstall.x86_64 1.6.2-3.el6.1 localrepo | |
# Turn them back on, cuz we need them after the next step | |
for file in $(ls /etc/yum.repos.d/ | grep repo_bad) | |
do | |
mv /etc/yum.repos.d/${file} /etc/yum.repos.d/$(basename $file .repo_bad).repo | |
done | |
# 8. Copy the fortunes package into ~/, turn it into rpm and install | |
cp /mnt/fortunes-ru_1.52-2_all.deb /root/ | |
# Obtain "alien" utility source code | |
wget -c https://sourceforge.net/projects/alien-pkg-convert/files/release/alien_8.95.tar.xz | |
tar -xf alien_8.95.tar.xz | |
# Make sure that perl is installed | |
dnf install perl <<< y | |
# Build "alien" from source | |
cd alien-8.95 | |
perl Makefile.PL; make; make install | |
cd .. | |
# Turn .deb into .rpm | |
alien --to-rpm fortunes-ru_1.52-2_all.deb | |
# Install fortunes | |
rpm --install --force fortunes-ru-1.52-3.noarch.rpm | |
# 9. Download the source rpm file with nano editor from centos repository | |
dnf download --source nano | |
# Unpack the source package | |
rpm -i ./nano-* | |
# Insert the symbolic link creation right after the installation process | |
patch ./rpmbuild/SPECS/nano.spec << EOF | |
@@ -53,6 +53,7 @@ | |
mkdir -p %{buildroot}%{_sysconfdir} | |
install -m 0644 ./nanorc %{buildroot}%{_sysconfdir}/nanorc | |
+ln --symbolic --relative %{buildroot}%{_bindir}/nano %{buildroot}%{_bindir}/newnano | |
%find_lang %{name} | |
%post | |
EOF | |
#sed -i '/^%find_lang %{name}/i \ | |
#ln --symbolic --relative %{buildroot}%{_bindir}/nano %{buildroot}%{_bindir}/newnano' ./rpmbuild/SPECS/nano.spec | |
# Build the new nano rpm package | |
rpmbuild --bb --nodeps --nodebuginfo --rmsource --rmspec ./rpmbuild/SPECS/nano.spec | |
# Make sure that nano doesn't exist in current system | |
dnf remove -y nano | |
# Install the new nano | |
dnf install -y ./rpmbuild/RPMS/x86_64/nano-* | |
# Clean the buildroot path | |
rm -rf ./rpmbuild |
Тем более что потом очень трудно отследить что кто-то доставил что-то со стороны.
@AlexTalker, та, которая собрана в репозитории, тянет за собой кучу неразрешимых зависимостей, по крайней мере, у меня
Вероятно, не зря
Почему неразрешимых кстати?
@AlexTalker, а-ля ему нужен debhelper, которому нужен dpkg-perl, а он уже в свою очередь ругается, что у меня perl не под deb собран, в целом, удаляется очень легко, просто в папке alien прописать make clean
Ну вот во имя защиты и разберётесь как сделать так чтобы из репы ставилось.
удаляется очень легко, просто в папке alien прописать make clean
И заодно в том, что делает цель clean
(спойлер: не деинсталляцию)
@AlexTalker, я знаю, что clean не для этого, но модуль uninstall там deprecated, и я попробовал методом тыка clean использовать, нет, он и правда не сработал, скорее всего до этого я alien, значит, ручками удалил
Потому что в epel уже собрали всё, зачем собирать это Вам?