On 13/06/11 13:24, Anssi Hannula wrote:
On 12.06.2011 02:37, Barry Jackson wrote:
On 11/06/11 18:03, Anssi Hannula wrote:
- Best to add a comment in the %post script to remind that any new files
need to have a %ghost entry created.
(btw: an alternative idea is to create a post-script and the filelist
at the same time in a single for loop in %build/%install, so that
the lists can never get out of sync as they are created from a single
list; however, your current solution is adequate as well)
Note added - keep it simple.
You added the note in the %files section, not in %post. The issue only
happens if someone updates %post but not %files, so it doesn't make
sense to put the reminder in %files :)
OK moved
- You don't check for failures. If the mktemp call fails, you extract
the tarball into /root etc.etc.. You need to check for failures on
the mktemp/mkdir/cd commands (mktemp failure can be detected by
checking if $newtmp string is empty), or alternatively run "set -e"
to make the shell exit on failures (this leaves the tmpdir polluted,
but it doesn't matter as much as it is an uncommon failure case and
/tmp is cleaned periodically anyway).
Added some checks - with clean-up of previously created dirs etc on fail.
mkdir %{mytmp}
[[ -d %{mytmp} ]] || exit 1
cd %{mytmp}
cd is not guaranteed to work even if %mytmp exists. Add "|| exit 1".
OK - done.
cd ${tmpextdir}
tar jxf %{mytmp}/skype-%{version}.tar.bz2
Same here...
Well, actually these two aren't that serious, since they can't be
exploited by non-root anyway. I'm somewhat ok with them, as long as your
mentor is as well and no one else objects.
I need a mentor ;)
Note that your "if ! [[ -d %{tmpdir} ]]; then" check is not 100%
necessary, as %tmpdir not existing is unlikely and causes no side effects.
I added that as the dir is created by tar, so if the tarball had the
wrong content the dir may not be created with the correct name.
Unlikely as you say.
Other nits:
- Use better variable names- %mytmp, $tmpextdir, %tmpdir are confusing.
Changed to tmp_download_dir, tmp_extract_dir and tmp_skype_dir
- The description starts with an empty line. Remove it.
Gone
I have started writing a script to generate the .txt files but can't
decide whether it should go as far as downloading the source from Skype
or simply be run on an extracted skype-<version> folder.
A first draft of this is attached.
I assume this would ultimately be added as a SOURCE file with notes in
the package.
Barry
%define name get-skype
%define version 2.2.0.35
%define release %mkrel 9
%define instdir %{_datadir}/skype
%define langdir %{instdir}/lang
%define avatardir %{instdir}/avatars
%define sounddir %{instdir}/sounds
%define icondir %{instdir}/icons
%define md5 6e28002c0086fae5206e2d242c3edcfa
%define tmp_download_dir %{_localstatedir}/lib/%{name}
Summary: Download and Install Skype
Name: %{name}
Version: %{version}
Release: %{release}
License: Proprietary
Group: Networking/Instant messaging
URL: http://www.skype.com
Buildarch: noarch
Requires: wget
Requires: liblcms1
Requires: libmng1
Requires: libqtcore4
Requires: libqtdbus4
Requires: libqtnetwork4
Requires: libqtgui4
Requires: libqtsvg4
Requires: libqtxml4
Requires: libxscrnsaver1
Requires: libxv1
Requires: libv4l-wrappers
# The following are lists of filenames (124 in total) placed
# in versioned text files to save clutter in the spec file.
Source0: avatars-%{version}.txt
Source1: sounds-%{version}.txt
Source2: lang-%{version}.txt
%description
This is an installer for Skype-%{version}.
This package does not contain any files as the Skype license does not allow
distribution.
By installing this package you will download and install Skype from skype.com.
You must accept the Skype EULA before using it.
Please be patient, this is a 23MB download and may take some time.
Uninstalling this package will uninstall Skype from your system.
%pre
mkdir %{tmp_download_dir}
[[ -d %{tmp_download_dir} ]] || exit 1
cd %{tmp_download_dir} || exit 1
wget -nc "http://download.skype.com/linux/skype-%{version}.tar.bz2"
md5chk=$(md5sum skype-%{version}.tar.bz2 | cut -d' ' -f1)
if [[ %{md5} != $md5chk ]]; then
rm skype-%{version}.tar.bz2
cd ..
rm -r %{tmp_download_dir}
echo "Error - download checksum failed"
exit 1
fi
%install
rm -rf $RPM_BUILD_ROOT
install -d -m 0755 %buildroot%{_bindir}
install -d -m 0755 %buildroot%{_datadir}/applications
touch %buildroot%{_datadir}/applications/skype.desktop
install -d -m 0755 %buildroot%{instdir}
touch %buildroot%{instdir}/{skype.desktop,skype,skype.conf,LICENSE,README}
install -d -m 0755 %buildroot%{langdir}
while read line; do
touch %buildroot%{langdir}/skype_"$line"
done < %{SOURCE2}
install -d -m 0755 %buildroot%{instdir}/icons
install -d -m 0755 %buildroot%{_iconsdir}
touch %buildroot%{_iconsdir}/skype.png
for i in 16 32 48; do
touch %buildroot%{_iconsdir}/SkypeBlue_${i}x${i}.png
touch %buildroot%{instdir}/icons/SkypeBlue_${i}x${i}.png
done
install -d -m 0755 %buildroot%{avatardir}
while read line; do
touch %buildroot%{avatardir}/"$line"
done < %{SOURCE0}
install -d -m 0755 %buildroot%{sounddir}
while read line; do
touch %buildroot%{sounddir}/"$line"
done < %{SOURCE1}
echo "LD_PRELOAD=/usr/lib/libv4l/v4l2convert.so %{instdir}/skype"\
> %buildroot%{_bindir}/skype && chmod +x %buildroot%{_bindir}/skype
%post
tmp_extract_dir=$(mktemp -d)
if ! [[ -d $tmp_extract_dir ]]; then
echo "Failed to create temporary directory"
rm -r %{tmp_download_dir}
exit 1
fi
%define tmp_skype_dir ${tmp_extract_dir}/skype-%{version}
cd ${tmp_extract_dir}
tar jxf %{tmp_download_dir}/skype-%{version}.tar.bz2
if ! [[ -d %{tmp_skype_dir} ]]; then
echo "Extracted file folder missing"
cd ..
rm -rf ${tmp_extract_dir}
rm -r %{tmp_download_dir}
exit 1
fi
# If any extra files are installed here then
# corresponding ghost files need to be added in files
mkdir -p %{instdir}
cp -a %{tmp_skype_dir}/icons/* %{_iconsdir}
cp -a %{_iconsdir}/SkypeBlue_48x48.png %{_iconsdir}/skype.png
cp -a %{tmp_skype_dir}/skype.desktop %{_datadir}/applications/
mv %{tmp_skype_dir}/skype %{instdir}
mv %{tmp_skype_dir}/skype.desktop %{instdir}
mv %{tmp_skype_dir}/skype.conf %{instdir}
mv %{tmp_skype_dir}/LICENSE %{instdir}
mv %{tmp_skype_dir}/README %{instdir}
mv %{tmp_skype_dir}/avatars %{instdir}
mv %{tmp_skype_dir}/lang %{langdir}
mv %{tmp_skype_dir}/sounds %{sounddir}
mv %{tmp_skype_dir}/icons %{icondir}
rm -r %{tmp_skype_dir}
cd ..
rm -r ${tmp_extract_dir}
rm -r %{tmp_download_dir}
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root)
%{_bindir}/skype
%ghost %{_iconsdir}/skype.png
%ghost %{_iconsdir}/SkypeBlue_*.png
%ghost %{_datadir}/applications/skype.desktop
%ghost %{instdir}
%changelog
* Mon Jun 13 2011 Barry Jackson <[email protected]> 2.2.0.35-8.mga1
- Added || exit 1 in pre
- Changed tmp file var names to be more descriptive.
* Sun Jun 12 2011 Barry Jackson <[email protected]> 2.2.0.35-8.mga1
- Removed full stop from summary.
* Sun Jun 12 2011 Barry Jackson <[email protected]> 2.2.0.35-7.mga1
- Added tests for failed directory creation, exiting with cleanup.
- Added note in post.
- Removed resource option on launch command line as we use default.
* Sat Jun 11 2011 Barry Jackson <[email protected]> 2.2.0.35-6.mga1
- Added md5sum check on download and cleanup on fail.
- Downloads to /var/lib/get-skype - removed after install.
- Creates unique /tmp/tmp.xxxx dir for extraction of tar.
- Added versioning to .txt files.
- Added removal of all tmp directories after install.
- Corrected URL:
* Thu Jun 9 2011 Barry Jackson <[email protected]> 2.2.0.35-5.mga1
- Bumped release to test update - no changes
* Thu Jun 9 2011 Barry Jackson <[email protected]> 2.2.0.35-4.mga1
- Moved installation to /usr/share instead of /opt
- Changed group and license
- Changed temporary dir
- Changed to wget for d/l
* Mon Jun 6 2011 Barry Jackson <[email protected]> 2.2.0.35-2.mga1
- Moved download to pre to stop install if d/l fails
* Sun Jun 5 2011 Barry Jackson <[email protected]> 2.2.0.35-1.mga1
- Changed get-skype version to follow Skype version.
- Changed URL to directly download only correct version.
- A copy of the downloaded file is retained in /tmp/skype-<version> to
- speed re-installation (unless you clean /tmp)
* Sat Jun 4 2011 Barry Jackson <[email protected]> 0.2.mga1
- Now all files are registered in rpm database.
- lang, avatar and sound filenames supplied in source files.
#!/bin/bash
#
# Save this file as skype-txt-gen in your home folder
# $ chmod +x skype-txt-gen
# Extract the new skype tarball into your home folder which should create a
folder e.g. ~/skype-2.2.0.35
# Run this script and copy the three output txt files to the SOURCES folder in
your rpm build tree.
#
#########################################################
if [[ ${#1} = 0 ]]; then
echo "Usage: $ ./skype-txt-gen <version>"
echo "example: $ ./skype-txt-gen 2.2.0.35"
exit 1
fi
version=$1
if ! [[ -d skype-$version ]]; then
echo "Directory skype-$version is missing"
exit 1
fi
dirname="skype-sources-$version"
rm -rf "$dirname"
mkdir "$dirname"
cd skype-"$version"
getavatars()
{
rm -f ../"$dirname"/avatars-"$version".txt
cd avatars
for item in *
do
echo $item >> ../../"$dirname"/avatars-"$version".txt
done
cd ..
}
getsounds()
{
rm -f ../"$dirname/"sounds-"$version".txt
cd sounds
for item in *
do
echo $item >> ../../"$dirname"/sounds-"$version".txt
done
cd ..
}
getlang()
{
rm -f ../"$dirname"/lang-"$version".txt
cd lang
for item in *
do
echo $item >> ../../"$dirname"/lang-"$version".txt
done
cd ..
sed -i 's/skype_//g' ../"$dirname"/lang-"$version".txt
}
getavatars
getsounds
getlang
echo "The text files have been created in ~/$dirname"