In this new release I have created a Manual page with some nice formatting. And expanded on some of the options now providing more meaningful information. The man page can be seen by typing:
man ./script
In the future this would be added to the PATH so that it can be seen from any location the same with the actual script.
As for the script I have expanded the help section to provide the information given in the man page.
Also I have automated the retrieval of the pidora kernel that I was previously unable to do it because I had no idea how to construct the url that provided me with the source RPM.
Some other notes:
For the Pidora source RPM it only looks for packages in the f19-rpfr Tag when changing to f20-rpfr this line would need to be modified.
The -b option now will take 3.11 instead of 3.11.y, using 3.11.y will cause errors. It is better anyways to use 3.11 just simpler.
There is no error checking so if the information provided is not right it will not finish successfully.
Still no name for the script .... Poor nameless script.
Since the scripts where getting too long I am instead linking to a file.
Man page:
https://drive.google.com/file/d/0B2G5T2vxJmLrUEhhZ1BrQ1JYWDA/edit?usp=sharing
Script:
https://drive.google.com/file/d/0B2G5T2vxJmLrTjJzcTNDeENEeDA/edit?usp=sharing
And I am off to Ecuador, it was great working on this. I will continue working on it when I return.
I plan on adding some error checking, some other useful options and cleaning up the the code more.
Ron's SBR600
Friday, December 13, 2013
Thursday, December 5, 2013
Release 0.2.1
Various bugfixes
Added email option to report when a new kernel is building - could not test it because bell blocks port 25
-------------------------------------------------------------------------------------------------
#!/bin/bash
#Check if the file contain the commit long exists
#If it does not exist create the file
if [ ! -f ./branches ]; then
touch branches
fi
if [ ! -f ./long_commit ]; then
touch long_commit
fi
# Retrieve branches from github - Retrieving branches from ls-remote instead of wget
#wget -qO- https://github.com/raspberrypi/linux | cat | grep 'data-name="rpi' | cut -d '"' -f2 > ./branches
# Delete the patches branch - Used only when using the wget way
#sed -i '$ d' ./branches
# Storing git remote head values on a file
git ls-remote https://github.com/raspberrypi/linux.git > ls_remote
# Retrieving Branches from ls_remote
# The sort is only cheking for the decimal place if a version 4.x comes out this will stop working if 3.x versions
# remain when doing a git ls-remote
cat ls_remote | grep rpi | cut -d '/' -f3 | sort -t $'.' -n -k2,2 > ./branches
# Store latest branch in a variable
branch=$(tail -1 ./branches)
# Storing url for use with wget
url=$(echo "https://github.com/raspberrypi/linux/tree/$branch/kernel")
#wget -qO- $url > ./page_source
# Retrieving informacion from the git ls-remote command
#commit_date=$( cat ./page_source | grep 'committed <time class="js-relative-date"' | cut -d '"' -f6 | cut -d ' ' -f1 | cut -d '-' -f1-3 --output-delimiter='' )
commit_date=$( date +"%Y%m%d")
long_commit=$( cat ./ls_remote | grep $branch | cut -f1)
short_commit=$( echo $long_commit | cut -c 1-7)
stored_long_commit=$(cat ./long_commit)
# Finding out the %_topdir value to see where the rpmbuild directory is being created
topdir=$( rpm --eval '%{_topdir}')
# Find latest package submitted to rpfr18-updates-automated
koji_build=$( armv6-koji latest-pkg f18-rpfr-updates-automated raspberrypi-kernel | tail -1 | cut -d ' ' -f1)
# Safe to use koji URL
#koji_url=$( echo "http://japan.proximity.on.ca/kojifiles/packages/raspberrypi-kernel/3.11.6/4.20131023git10bc582.rpfr19/src/raspberrypi-kernel-3.11.6-4.20131023git10bc582.rpfr19.src.rpm" )
koji_url=$( echo "http://japan.proximity.on.ca/kojifiles/packages/raspberrypi-kernel/3.12.0/4.20131106git839f349.rpfr18/src/raspberrypi-kernel-3.12.0-4.20131106git839f349.rpfr18.src.rpm" )
# Usage function for the script
usage(){
echo "
usage: $0 -h | -l | -b <branch> | -k <URL> | -m <email@address.com>
If the -k option is not used the latest will be used
OPTIONS:
-h Shows this message
-l List Branches
-b Branch
-k Koji kernel url to download
-m address to mail
EXAMPLE:
$0 -h
$0 -l
$0 -b 3.11.y
$0 -k http://japan.proximity.on.ca/kojifiles/packages/raspberrypi...
$0 -b 3.12.y -k http://japan.proximity.on.ca/...
$0 -m somebody@senecacollege.ca
"
}
sendmail(){
echo "There is a new kernel" | mail -s "Kernel Update" $1
}
# Use options to find out which version of the kernel to use
# Also added an option to list all the branches
while getopts "hlb:k:m:" OPTION
do
case $OPTION in
h)
usage
exit 1
;;
b)
branch=$OPTARG
;;
k)
koji_url=$OPTARG
;;
l)
cat ./branches
exit 1
;;
m)
mailFlag=1
email_address=$OPTARG
;;
# v)
# versionFlag=1
# version=$OPTARG
# ;;
?)
usage
exit 1
;;
esac
done
# Find version from koji url, if the -k option is not in use
if [ "$versionFlag" != "1" ]; then
version=$( echo $koji_url | cut -d '/' -f7 | cut -d '-' -f2)
fi
# Find source rpm file name downloaded from koji
srcrpm=$( echo $koji_url | cut -d '/' -f10 )
distro=$( echo $srcrpm | cut -d '.' -f5)
# If the file is empty store the long_commit variable
# Otherwise compare the long commit form Github with the one in the file
# If they are the same do nothing and exit
# If they are different store the new value in the file and download the new kernel
if [ ! -s ./long_commit ]; then
echo $long_commit > ./long_commit
else
if [ "$long_commit" == "$stored_long_commit" ] ; then
#Nothing to do
flag=0
echo "There is no new kernel"
else
# Replace the old commit with new commit
echo $long_commit > ./long_commit
#Proceed to build kernel
flag=1
fi
fi
if [ $flag -eq 1 ]; then
# Download previous built kernel to retrieve some necessary files including the spec file
wget $koji_url
# Download new kernel
new_kernel_url=$(echo "https://github.com/raspberrypi/linux/tarball/$long_commit")
wget $new_kernel_url
# Create and wipe rmbuild tree of directories
rpmdev-setuptree
rpmdev-wipetree
# Extract files from source rpm downloaded from koji
rpm2cpio $srcrpm | cpio -idmv
# Modifiying SPEC file with info from the new kernel
sed -i "s/commit_date\ .*/commit_date $commit_date/" raspberrypi-kernel.spec
sed -i "s/commit_short\ .*/commit_short $short_commit/" raspberrypi-kernel.spec
sed -i "s/commit_long\ .*/commit_long $long_commit/" raspberrypi-kernel.spec
# Copy spec file to ~/rpmbuild/SPECS
mv raspberrypi-kernel.spec $topdir/SPECS/
# Bump SPEC
rpmdev-bumpspec -c "Updated to latest commit" $topdir/SPECS/raspberrypi-kernel.spec
# Copye source files to ~/rpmbuild/SOURCES
mv first32k.bin.bz2 $topdir/SOURCES
newfile=$(echo "pidora-config-$version-"$short_commit".bz2")
file=$( ls -l | grep 'pidora-config' | awk '{print $9}' )
mv $file $newfile
mv $newfile $topdir/SOURCES
mv "$long_commit" $topdir/SOURCES
# Send Source Package to Koji
release=$( cat ~/rpmbuild/SPECS/raspberrypi-kernel.spec | grep Release | cut -d ' ' -f9 | cut -d '.' -f1)
modular_srcrpm=$(echo "raspberrypi-kernel-"$version"-"$release"."$commit_date"git"$short_commit"."$distro".src.rpm")
koji -s 'http://japan.proximity.on.ca/kojihub' build f18-rpfr-updates-automated $topdir/SRPMS/$modular_srcrpm
# Send email reporting about new build
if [ "$mailFlag" == "1" ]; then
sendmail $email_address
fi
fi
Wednesday, November 27, 2013
Release 0.2
In this release I added Options which will provide help with the -h option, -l will list the branches, -b will specify the branch and -k will specify which url to use to download the koji source rpm.
If no option is selected the script will use the latest branch and it will select a pre-configured url to get the koji source rpm.
#!/bin/bash
#Check if the file contain the commit long exists
#If it does not exist create the file
if [ ! -f ./branches ]; then
touch branches
fi
if [ ! -f ./long_commit ]; then
touch long_commit
fi
# Retrieve branches from github - Retrieving branches from ls-remote instead of wget
#wget -qO- https://github.com/raspberrypi/linux | cat | grep 'data-name="rpi' | cut -d '"' -f2 > ./branches
# Delete the patches branch - Used only when using the wget way
#sed -i '$ d' ./branches
# Storing git remote head values on a file
git ls-remote https://github.com/raspberrypi/linux.git > ls_remote
# Retrieving Branches from ls_remote
# The sort is only cheking for the decimal place if a version 4.x comes out this will stop working if 3.x versions
# remain when doing a git ls-remote
cat ls_remote | grep rpi | cut -d '/' -f3 | sort -t $'.' -n -k2,2 > ./branches
# Store latest branch in a variable
branch=$(tail -1 ./branches)
# Storing url for use with wget
url=$(echo "https://github.com/raspberrypi/linux/tree/$branch/kernel")
wget -qO- $url > ./page_source
# Retrieving informacion from the git ls-remote command
#commit_date=$( cat ./page_source | grep 'committed <time class="js-relative-date"' | cut -d '"' -f6 | cut -d ' ' -f1 | cut -d '-' -f1-3 --output-delimiter='' )
commit_date=$( date +"%Y%m%d")
long_commit=$( cat ./ls_remote | grep $branch | cut -f1)
short_commit=$( echo $long_commit | cut -c 1-7)
stored_long_commit=$(cat ./long_commit)
# Finding out the %_topdir value to see where the rpmbuild directory is being created
topdir=$( rpm --eval '%{_topdir}')
# Find latest package submitted to rpfr18-updates-automated
koji_build=$( armv6-koji latest-pkg f18-rpfr-updates-automated raspberrypi-kernel | tail -1 | cut -d ' ' -f1)
# Safe to use koji URL
koji_url=$( echo "http://japan.proximity.on.ca/kojifiles/packages/raspberrypi-kernel/3.11.6/4.20131023git10bc582.rpfr19/src/raspberrypi-kernel-3.11.6-4.20131023git10bc582.rpfr19.src.rpm" )
# Usage function for the script
usage(){
echo "
usage: $0 -h | -l | -b <branch> | -k <URL>
If the -k option is not used the latest will be used
OPTIONS:
-h Shows this message
-l List Branches
-b Branch
If no option is selected the script will use the latest branch and it will select a pre-configured url to get the koji source rpm.
#!/bin/bash
#Check if the file contain the commit long exists
#If it does not exist create the file
if [ ! -f ./branches ]; then
touch branches
fi
if [ ! -f ./long_commit ]; then
touch long_commit
fi
# Retrieve branches from github - Retrieving branches from ls-remote instead of wget
#wget -qO- https://github.com/raspberrypi/linux | cat | grep 'data-name="rpi' | cut -d '"' -f2 > ./branches
# Delete the patches branch - Used only when using the wget way
#sed -i '$ d' ./branches
# Storing git remote head values on a file
git ls-remote https://github.com/raspberrypi/linux.git > ls_remote
# Retrieving Branches from ls_remote
# The sort is only cheking for the decimal place if a version 4.x comes out this will stop working if 3.x versions
# remain when doing a git ls-remote
cat ls_remote | grep rpi | cut -d '/' -f3 | sort -t $'.' -n -k2,2 > ./branches
# Store latest branch in a variable
branch=$(tail -1 ./branches)
# Storing url for use with wget
url=$(echo "https://github.com/raspberrypi/linux/tree/$branch/kernel")
wget -qO- $url > ./page_source
# Retrieving informacion from the git ls-remote command
#commit_date=$( cat ./page_source | grep 'committed <time class="js-relative-date"' | cut -d '"' -f6 | cut -d ' ' -f1 | cut -d '-' -f1-3 --output-delimiter='' )
commit_date=$( date +"%Y%m%d")
long_commit=$( cat ./ls_remote | grep $branch | cut -f1)
short_commit=$( echo $long_commit | cut -c 1-7)
stored_long_commit=$(cat ./long_commit)
# Finding out the %_topdir value to see where the rpmbuild directory is being created
topdir=$( rpm --eval '%{_topdir}')
# Find latest package submitted to rpfr18-updates-automated
koji_build=$( armv6-koji latest-pkg f18-rpfr-updates-automated raspberrypi-kernel | tail -1 | cut -d ' ' -f1)
# Safe to use koji URL
koji_url=$( echo "http://japan.proximity.on.ca/kojifiles/packages/raspberrypi-kernel/3.11.6/4.20131023git10bc582.rpfr19/src/raspberrypi-kernel-3.11.6-4.20131023git10bc582.rpfr19.src.rpm" )
# Usage function for the script
usage(){
echo "
usage: $0 -h | -l | -b <branch> | -k <URL>
If the -k option is not used the latest will be used
OPTIONS:
-h Shows this message
-l List Branches
-b Branch
-k Koji kernel url to download
EXAMPLE:
$0 -h
$0 -l
$0 -b 3.11.y
$0 -k http://japan.proximity.on.ca/kojifiles/packages/raspberrypi...
$0 -b 3.12.y -k http://japan.proximity.on.ca/...
"
}
# Use options to find out which version of the kernel to use
# Also added an option to list all the branches
while getopts "hlb:k:" OPTION
do
case $OPTION in
h)
usage
exit 1
;;
b)
branch=$OPTARG
;;
k)
koji_url=$OPTARG
;;
l)
cat ./branches
exit 1
;;
?)
usage
exit 1
;;
esac
done
# If the file is empty store the long_commit variable
# Otherwise compare the long commit form Github with the one in the file
# If they are the same do nothing and exit
# If they are different store the new value in the file and download the new kernel
if [ ! -s ./long_commit ]; then
echo $long_commit > ./long_commit
else
if [ "$long_commit" == "$stored_long_commit" ] ; then
#Nothing to do
flag=0
echo "There is no new kernel"
else
# Replace the old commit with new commit
echo $long_commit > ./long_commit
#Proceed to build kernel
flag=1
fi
fi
if [ $flag -eq 1 ]; then
# Download previous built kernel to retrieve some necessary files including the spec file
wget $koji_url
# Download new kernel
new_kernel_url=$(echo "https://github.com/raspberrypi/linux/tarball/$long_commit")
wget $new_kernel_url
# Create and wipe rmbuild tree of directories
rpmdev-setuptree
rpmdev-wipetree
# Extract files from source rpm downloaded from koji
rpm2cpio raspberrypi-kernel-3.11.6-4.20131023git10bc582.rpfr19.src.rpm | cpio -idmv
# Modifiying SPEC file with info from the new kernel
sed -i "s/commit_date\ .*/commit_date $commit_date/" raspberrypi-kernel.spec
sed -i "s/commit_short\ .*/commit_short $short_commit/" raspberrypi-kernel.spec
sed -i "s/commit_long\ .*/commit_long $long_commit/" raspberrypi-kernel.spec
# Copy spec file to ~/rpmbuild/SPECS
mv raspberrypi-kernel.spec $topdir/SPECS/
# Bump SPEC
rpmdev-bumpspec -c "Updated to latest commit" $topdir/SPECS/raspberrypi-kernel.spec
# Copye source files to ~/rpmbuild/SOURCES
mv first32k.bin.bz2 $topdir/SOURCES
newfile=$(echo "pidora-config-3.11.6-"$short_commit".bz2")
file=$( ls -l | grep 'pidora-config' | awk '{print $9}' )
mv $file $newfile
mv $newfile $topdir/SOURCES
mv "$long_commit" $topdir/SOURCES
# Build rpm source package
rpmbuild -bs $topdir/SPECS/raspberrypi-kernel.spec
# Send Source Package to Koji
release=$( cat ~/rpmbuild/SPECS/raspberrypi-kernel.spec | grep Release | cut -d ' ' -f9 | cut -d '.' -f1)
srcrpm=$(echo "raspberrypi-kernel-3.11.6-"$release"."$commit_date"git"$short_commit".rpfr19.src.rpm")
koji -s 'http://japan.proximity.on.ca/kojihub' build f18-rpfr-updates-automated $topdir/SRPMS/$srcrpm
fi
Tuesday, November 26, 2013
Release 0.1.5
- After seeing that wget was not actually getting the source how it was supposed to I made a few changes. So instead of using wget to retrieve commits and the kernel versions I am using git ls-remote it is way better.
- Date now is using the build date instead of the date of the commit
- Instead of looking for the rpmbuild folder in home which is the default directory I am retrieving the information from the %{_topdir} variable. This way if somebody has setup the rmpbuild directory to another location the script will still be able to function properly.
--------------------------------------------------
Start of script
#!/bin/bash
#Check if the file contain the commit long exists
#If it does not exist create the file
if [ ! -f ./branches ]; then
touch branches
fi
if [ ! -f ./long_commit ]; then
touch long_commit
fi
if [ ! -f ./page_source ]; then
touch page_source
fi
# Retrieve branches from github - Retrieving branches from ls-remote instead of wget
#wget -qO- https://github.com/raspberrypi/linux | cat | grep 'data-name="rpi' | cut -d '"' -f2 > ./branches
# Delete the patches branch - Used only when using the wget way
#sed -i '$ d' ./branches
# Storing git remote head values on a file
git ls-remote https://github.com/raspberrypi/linux.git > ls_remote
# Retrieving Branches from ls_remote
# The sort is only cheking for the decimal place if a version 4.x comes out this will stop working if 3.x versions
# remain when doing a git ls-remote
cat ls_remote | grep rpi | cut -d '/' -f3 | sort -t $'.' -n -k2,2 > ./branches
# Store latest branch in a variable
branch=$(tail -1 ./branches)
# There are some issues with 3.12.y so I am statically using 3.11.y
branch="rpi-3.11.y"
# Storing url for use with wget
url=$(echo "https://github.com/raspberrypi/linux/tree/$branch/kernel")
wget -qO- $url > ./page_source
# Retrieving informacion from the page source
#commit_date=$( cat ./page_source | grep 'committed <time class="js-relative-date"' | cut -d '"' -f6 | cut -d ' ' -f1 | cut -d '-' -f1-3 --output-delimiter='' )
commit_date=$( date +"%Y%m%d")
long_commit=$( cat ./ls_remote | grep $branch | cut -f1)
short_commit=$( echo $long_commit | cut -c 1-7)
stored_long_commit=$(cat ./long_commit)
# Finding out the %_topdir value to see where the rpmbuild directory is being created
topdir=$( rpm --eval '%{_topdir}')
# If the file is empty store the long_commit variable
# Otherwise compare the long commit form Github with the one in the file
# If they are the same do nothing and exit
# If they are different store the new value in the file and download the new kernel
if [ ! -s ./long_commit ]; then
echo $long_commit > ./long_commit
else
if [ "$long_commit" == "$stored_long_commit" ] ; then
#Nothing to do
flag=0
echo "There is no new kernel"
else
# Replace the old commit with new commit
echo $long_commit > ./long_commit
#Proceed to build kernel
flag=1
fi
fi
if [ $flag -eq 1 ]; then
# Download previous built kernel to retrieve some necessary files including the spec file
wget http://japan.proximity.on.ca/kojifiles/packages/raspberrypi-kernel/3.11.6/4.20131023git10bc582.rpfr19/src/raspberrypi-kernel-3.11.6-4.20131023git10bc582.rpfr19.src.rpm
# Download new kernel
new_kernel_url=$(echo "https://github.com/raspberrypi/linux/tarball/$long_commit")
wget $new_kernel_url
rpmdev-setuptree
rpmdev-wipetree
rpm2cpio raspberrypi-kernel-3.11.6-4.20131023git10bc582.rpfr19.src.rpm | cpio -idmv
# rpm -i raspberrypi-kernel-3.11.6-4.20131023git10bc582.rpfr19.src.rpm
# Modifiying SPEC file with info from the new kernel
sed -i "s/commit_date\ .*/commit_date $commit_date/" raspberrypi-kernel.spec
sed -i "s/commit_short\ .*/commit_short $short_commit/" raspberrypi-kernel.spec
sed -i "s/commit_long\ .*/commit_long $long_commit/" raspberrypi-kernel.spec
# Copy spec file to ~/rpmbuild/SPECS
cp raspberrypi-kernel.spec $topdir/SPECS/
# Bump SPEC
rpmdev-bumpspec -c "Updated to latest commit" $topdir/SPECS/raspberrypi-kernel.spec
# Copye source files to ~/rpmbuild/SOURCES
cp first32k.bin.bz2 $topdir/SOURCES
newfile=$(echo "pidora-config-3.11.6-"$short_commit".bz2")
file=$( ls -l | grep 'pidora-config' | awk '{print $9}' )
cp $file $newfile
mv $newfile $topdir/SOURCES
cp "$long_commit" $topdir/SOURCES
# Build rpm source package
rpmbuild -bs $topdir/SPECS/raspberrypi-kernel.spec
# Send Source Package to Koji
release=$( cat ~/rpmbuild/SPECS/raspberrypi-kernel.spec | grep Release | cut -d ' ' -f9 | cut -d '.' -f1)
srcrpm=$(echo "raspberrypi-kernel-3.11.6-"$release"."$commit_date"git"$short_commit".rpfr19.src.rpm")
# koji -s 'http://japan.proximity.on.ca/kojihub' build f18-rpfr-updates-automated $topdir/SRPMS/$srcrpm
fi
Wednesday, November 20, 2013
Release 0.1.1
I have modified my release 0.1 to send to koji the right source package, before it was looking for the wrong one. I could not test this because I had not setup the keys to access the koji system in seneca.
The lines modified are:
# Send Source Package to Koji
release=$( cat ~/rpmbuild/SPECS/raspberrypi-kernel.spec | grep Release | cut -d ' ' -f9 | cut -d '.' -f1)
srcrpm=$(echo "raspberrypi-kernel-3.11.6-"$release"."$commit_date"git"$short_commit".rpfr19.src.rpm")
koji -s 'http://japan.proximity.on.ca/kojihub' build f18-rpfr-updates-automated ~/rpmbuild/SRPMS/$srcrpm
The lines modified are:
# Send Source Package to Koji
release=$( cat ~/rpmbuild/SPECS/raspberrypi-kernel.spec | grep Release | cut -d ' ' -f9 | cut -d '.' -f1)
srcrpm=$(echo "raspberrypi-kernel-3.11.6-"$release"."$commit_date"git"$short_commit".rpfr19.src.rpm")
koji -s 'http://japan.proximity.on.ca/kojihub' build f18-rpfr-updates-automated ~/rpmbuild/SRPMS/$srcrpm
When sent to koji I get the following error
ActionNotAllowed: policy violation (build_from_srpm)
Perhaps it is because I am not yet a user in the koji system or maybe because I am taking the file from SRPMS.
I have also started looking into getops for 0.2 and a few other tweaks for gathering the information and files needed.
Wednesday, November 13, 2013
Release 0.1
After doing some spending some time with my code given that the presentation day was upon me, I managed to get the most of the code up and running with the exception of the last command koji that was not accepting my keys.
There are other things to tinker in the code but for 0.1 this should suffice.
#!/bin/bash
#Check if the file contain the commit long exists
#If it does not exist create the file
if [ ! -f ./branches ]; then
touch branches
fi
if [ ! -f ./long_commit ]; then
touch long_commit
fi
if [ ! -f ./page_source ]; then
touch page_source
fi
# Retrieve branches from github
wget -qO- https://github.com/raspberrypi/linux | cat | grep 'data-name="rpi' | cut -d '"' -f2 > ./branches
# Delete the patches branci that way the latest branch is last
sed -i '$ d' ./branches
# store in a variable the latest branch
branch=$(tail -1 ./branches)
# There are some issues with 3.12.y so I am statically using 3.11.y
branch="rpi-3.11.y"
# Storing url for use with wget
url=$(echo "https://github.com/raspberrypi/linux/tree/$branch/kernel")
wget -qO- $url > ./page_source
commit_date=$( cat ./page_source | grep 'committed <time class="js-relative-date"' | cut -d '"' -f6 | cut -d ' ' -f1 | cut -d '-' -f1-3 --output-delimiter='' )
long_commit=$( cat ./page_source | grep 'js-zeroclipboard zeroclipboard-link' | cut -d '"' -f4)
short_commit=$( echo $long_commit | cut -c 1-7)
stored_long_commit=$(cat ./long_commit)
# If the file is empty store the long_commit variable
# Otherwise compare the long commit form Github with the one in the file
# If they are the same do nothing and exit
# If they are different store the new value in the file and download the new kernel
if [ ! -s ./long_commit ]; then
echo $long_commit > ./long_commit
else
if [ "$long_commit" == "$stored_long_commit" ] ; then
#Nothing to do
flag=0
echo "There is no new kernel"
else
# Replace the old commit with new commit
echo $long_commit > ./long_commit
#Proceed to build kernel
flag=1
fi
fi
if [ $flag -eq 1 ]; then
There are other things to tinker in the code but for 0.1 this should suffice.
#!/bin/bash
#Check if the file contain the commit long exists
#If it does not exist create the file
if [ ! -f ./branches ]; then
touch branches
fi
if [ ! -f ./long_commit ]; then
touch long_commit
fi
if [ ! -f ./page_source ]; then
touch page_source
fi
# Retrieve branches from github
wget -qO- https://github.com/raspberrypi/linux | cat | grep 'data-name="rpi' | cut -d '"' -f2 > ./branches
# Delete the patches branci that way the latest branch is last
sed -i '$ d' ./branches
# store in a variable the latest branch
branch=$(tail -1 ./branches)
# There are some issues with 3.12.y so I am statically using 3.11.y
branch="rpi-3.11.y"
# Storing url for use with wget
url=$(echo "https://github.com/raspberrypi/linux/tree/$branch/kernel")
wget -qO- $url > ./page_source
commit_date=$( cat ./page_source | grep 'committed <time class="js-relative-date"' | cut -d '"' -f6 | cut -d ' ' -f1 | cut -d '-' -f1-3 --output-delimiter='' )
long_commit=$( cat ./page_source | grep 'js-zeroclipboard zeroclipboard-link' | cut -d '"' -f4)
short_commit=$( echo $long_commit | cut -c 1-7)
stored_long_commit=$(cat ./long_commit)
# If the file is empty store the long_commit variable
# Otherwise compare the long commit form Github with the one in the file
# If they are the same do nothing and exit
# If they are different store the new value in the file and download the new kernel
if [ ! -s ./long_commit ]; then
echo $long_commit > ./long_commit
else
if [ "$long_commit" == "$stored_long_commit" ] ; then
#Nothing to do
flag=0
echo "There is no new kernel"
else
# Replace the old commit with new commit
echo $long_commit > ./long_commit
#Proceed to build kernel
flag=1
fi
fi
if [ $flag -eq 1 ]; then
# Download previous built kernel to retrieve some necessary files including the spec file
wget http://japan.proximity.on.ca/kojifiles/packages/raspberrypi-kernel/3.11.6/4.20131023git10bc582.rpfr19/src/raspberrypi-kernel-3.11.6-4.20131023git10bc582.rpfr19.src.rpm
# Download new kernel
new_kernel_url=$(echo "https://github.com/raspberrypi/linux/tarball/$long_commit")
wget $new_kernel_url
rpmdev-setuptree
rpmdev-wipetree
rpm2cpio raspberrypi-kernel-3.11.6-4.20131023git10bc582.rpfr19.src.rpm | cpio -idmv
# rpm -i raspberrypi-kernel-3.11.6-4.20131023git10bc582.rpfr19.src.rpm
# Modifiying SPEC file with info from the new kernel
sed -i "s/commit_date\ .*/commit_date $commit_date/" raspberrypi-kernel.spec
sed -i "s/commit_short\ .*/commit_short $short_commit/" raspberrypi-kernel.spec
sed -i "s/commit_long\ .*/commit_long $long_commit/" raspberrypi-kernel.spec
# Copy spec file to ~/rpmbuild/SPECS
cp raspberrypi-kernel.spec ~/rpmbuild/SPECS/
# Bump SPEC
rpmdev-bumpspec -c "Updated to latest commit" ~/rpmbuild/SPECS/raspberrypi-kernel.spec
# Copye source files to ~/rpmbuild/SOURCES
cp first32k.bin.bz2 ~/rpmbuild/SOURCES
newfile=$(echo "pidora-config-3.11.6-"$short_commit".bz2")
file=$( ls -l | grep 'pidora-config' | awk '{print $9}' )
cp $file $newfile
mv $newfile ~/rpmbuild/SOURCES
cp "$long_commit" ~/rpmbuild/SOURCES
# Build rpm source package
rpmbuild -bs ~/rpmbuild/SPECS/raspberrypi-kernel.spec
# Send Source Package to Koji
koji -s 'http://japan.proximity.on.ca/kojihub' build f18-rpfr-updates-automated-build ~/rpmbuild/SRPMS/raspberrypi-kernel-3.11.6-5.20131013git3e1fee6.rpfr19.src.rpm
fi
There it is my code. I got to say, I was a rusty with bash
Thursday, October 3, 2013
Python Lab
Python lab:
Python from the little I have played with python it shares some similarities with java. I do appreciate the fact that it forces you indent your code and make it closer to be universal but I do miss starting and ending brackets. I also miss ending code statements with ; This means that I cannot put another line of code in the same line. Variables are also handled differently as you do not need to setup the type for them. This could maybe become a little bit confusing if not being careful because the variable could switch from int to string for example well if python permits that.
In general it is easy to start coding with python if there is a previous java/c experience. For the part Google is kind enough to help.
17 import random
18 import os
19 import sys
20
21 #Intro and tutorial
22 os.system('clear')
23 print ("#####################")
24 print ("#Rules of the game: #")
25 print ("#####################\n")
26 print ("Guess the right number from 1 to 100")
27 print ("The maximum number of tries is 15, good luck !!!\n")
28
29 try:
30 raw_input("press enter to continue...")
31 # Handle interrupts like ctrl+c
32 except KeyboardInterrupt:
33 print ("\nUntil next time quitter")
34 sys.exit()
35
36 # Initialize vars
37 guess = 0
38 numTries = 0
39 secret=random.randint(1,100)
40
41 # Loop until answer is found or number of tries gets to 15
42 while (secret != guess and numTries != 15):
43 # Catch exceptions
44 try:
45 guess = int(raw_input("\nEnter a guess: "))
46 if guess < secret:
47 numTries = numTries + 1
48 print "Too low! , Try #:", numTries
49 elif guess > secret:
50 numTries = numTries + 1
51 print "Too high! , Try #:", numTries
52 else:
53 numTries = numTries + 1
54 print "Correct!, Total number of tries:", numTries , "\n"
55 if numTries == 15:
56 print "\nMaximum number of tries reached, Good luck next time !!!\n"
57
58 # Handle characters other than int
59 except ValueError:
60 print ("Please enter integers only")
61
62 # Handle interrupts like ctrl+c
63 except KeyboardInterrupt:
64 print ("\nUntil next time quitter")
65 sys.exit()
Here is my code. I did go a little bit further while playing with python. It is was really enjoyable. Of course improvements could be made … perhaps … but that is beyond the scope of this lab.
I went ahead and did everything in one commit. It was short enough to keep track of everything going in the code and find the errors instantly.
rhernandez2@matrix:~/play/guess> git commit -a -m "Initial and maybe last commit"
[master 430ea2a] Initial and maybe last commit
Committer: Ronald Hernandez <rhernandez2@matrix.senecac.on.ca>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:
git config --global user.name "Your Name"
git config --global user.email you@example.com
After doing this, you may fix the identity used for this commit with:
git commit --amend --reset-author
1 file changed, 52 insertions(+), 8 deletions(-)
Subscribe to:
Posts (Atom)