Koha and the “magic” of XSLT : displaying new MARC fields on the OPAC.

A short tutorial on using XSLT to make MARC fields in your data visible on the OPAC.

Earlier today, Suresh Kumar Tejomurtula, a member of the venerable LIS-Forum mailing list being run out of IISc Bangalore, posted a question on that list:

Under language codes of 008/35-37 and also under 041$a I added language code. for eg: tel for Telugu language. But I do not see any difference to the view of the record, except that the marc tags contains that values. Adding these fields data will enable library team to understand the language of the material. My question is, How will the users of the OPAC, who do not know about marc language codes will understand the item language [from just the 3-letter code sequence].

Short answer : Using XSLT

Much of Koha’s superpowers on the OPAC (as also on the staff client) side comes from its judicious use of XSLT. When we search for documents in Koha, the result that is returned from the database by way of the various perl modules that perform much of Koha’s internal plumbing, comes in as an XML (eXtensible Markup Language) document. More precisely it is returned as a MARCXML record. Readers of this blog who are familiar with the MarcEdit software may have often encountered a MARCXML record. Those who are not so familiar may well like to read up a bit from here before proceeding with this post.

So what is XSLT?

Wikipedia gives the definition of XSLT as –

“XSLT (Extensible Stylesheet Language Transformations) is a language for transforming XML documents into other XML documents, or other formats such as HTML for web pages, plain text or XSL Formatting Objects, which may subsequently be converted to other formats, such as PDF, PostScript and PNG.”

Where to start?

At the OPAC level, the XSLT magic is primarily driven by two files i.e. (a) MARC21slim2OPACResults.xsl and (b) MARC21slim2OPACDetail.xsl. Koha’s default settings of how we see the search results on the OPAC and the document specific details in the Normal view, are defined in these two files.

N.B. Directly editing these two files is strictly not advised unless you are a XSLT guru.

Lucky for us that Koha’s system preferences provide options to override the defaults by creating new XSLT files and telling Koha to use the new ones instead. The screenshot below shows the default setting.

2017-05-04_03-05-15

The two files are available inside a folder named xslt under the locale of the selected theme you are using e.g. /usr/share/koha/opac/htdocs/opac-tmpl/bootstrap/en/xslt/ on a package-based installation. By default most of us in India would be using the English locale i.e. “en”. The default Koha theme is “bootstrap”. Thus if you are using a custom theme and/or different locale look for the files under that.

Step #1 : Copying the XSLT files

We will be fetching the 3-letter language code from MARC 008/35-37 of each marc record. Since our Koha instance here is named as “demo”, we’ll make a copy of the file MARC21slim2OPACResults.xsl as MARC21slim2OPACResults-demo.xsl and the MARC21slim2OPACDetail.xsl as MARC21slim2OPACDetail-demo.xsl.

N.B. You can give any name to the copies you make, but it is suggested that the less adventurous you are with the names, easier it will be for you to trace your steps back if you make a mistake while editing them. And trust me you will make mistakes, at least initially.

Step #2 : Editing MARC21slim2OPACResults-demo.xsl

The MARC21slim2OPACResults.xsl is what drives the display of results of a search on the Koha OPAC. And it does not show the value of 008/35-37 i.e. MARC language code, while displaying the search result. To add this facility, we need to do the following to our copy i.e. MARC21slim2OPACResults-demo.xsl. Around line no. 70 or there about, there will be this line <xsl:variable name="controlField008-30-31" select="substring($controlField008,31,2)"/>. Add the following line after it – <xsl:variable name="controlField008_35-37" select="substring($controlField008,36,3)"/>.

Explanation: we’re defining a new variable named controlField008_35-37 and in it we are storing the 3-digit value found at 008/35-37 from another variable – controlField008.

The second step in editing this file is to add the code to check if (a) 008/35-37 actually exists (e.g. if you have a blank 008 field, 008/35-37 won’t exist) and (b) it is set as something other than “und(i.e. undefined). The following code does that first and proceeds to match the value found in 008/35-37 against 23 different languages. These languages are English and the 22 official languages of India as per the Eighth Schedule of the Indian Constitution. You can add or remove any language from this list as you require. However, when you do, please make sure that the codes you setup in this list here are coming from the Code Sequence document of the MARC Code list for languages as published by the US Library of Congress.

This means that you must also be using these same exact codes in your MARC records in Koha.

2017-05-04_05-40-55

Where we place this code will depend on where we want this language to listed in the results. In our case, we decided to add it between Material type and Format. And thus in our case, the code was added at line no 637. If you too want language to be displayed between the Material Type and Format, then look out for this line <xsl:if test="string-length(normalize-space($physicalDescription))"> and add this block before.

Saved the file and moved on to the next section.

Step #3 : Editing MARC21slim2OPACDetail-demo.xsl

The process is similar to what we just did above. Open the file MARC21slim2OPACDetail-demo.xsl for editing and go to line no. 51 (or there about) and look for this line <xsl:variable name="controlField008" select="marc:controlfield[@tag=008]"/>. Add the following line immediately after that: <xsl:variable name="controlField008_35-37" select="substring($controlField008,36,3)"/>.

2017-05-04_06-02-17

Since we wanted the “Language of document” to come after Material type, we added the code immediate after the node <xsl:if test="$DisplayOPACiconsXSLT!='0'"> is closed but before <!--Series: Alternate Graphic Representation (MARC 880) -->; in our case, this worked out to be around line no. 195. Finally, we saved and closed the file.

Getting Koha to use the new XSLT files

The Koha system preference OPACXSLTResultsDisplay was changed from its original setting (i.e. “default”) and set to the path of our new file MARC21slim2OPACResults-demo.xsl i.e. /usr/share/koha/opac/htdocs/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACResults-demo.xsl. Likewise the other system preference OPACXSLTDetailsDisplay was changed to /usr/share/koha/opac/htdocs/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACDetail-demo.xsl. It was time to test our XSLT modifications.

And it works!

Since pictures are said to be worth a 1000 words, we will let before and after screen grabs do the talking here. Also if anyone wants to see directly how it actually looks after applying the changed XSLT, visit the URL http://demo-opac.l2c2academy.co.in/cgi-bin/koha/opac-detail.pl?biblionumber=18

Before : Using the default MARC21slim2OPACResults.xsl

chrome_2017-05-04_07-05-24

After : Using the new MARC21slim2OPACResults-demo.xsl

chrome_2017-05-04_07-17-09

Before : Using the default MARC21slim2OPACDetail.xsl

chrome_2017-05-04_07-48-28

After : Using the new MARC21slim2OPACDetail-demo.xsl

chrome_2017-05-04_07-49-09

The 5-Minute Series : Downloading your Koha SQL Report

Presenting a fast and flexible option to download your report.

One of the best things about Koha is the complete freedom it provides its users to create a custom SQL report of any level or degree of complexity as long as the query is compliant to MySQL SQL syntax – reports like e.g. accession registers, detailed circulation statistics etc.

Of course, once you have your report, if you are anything like *us*, you would want to grab the data and the do further analysis or use it to make that fancy-schmancy report or use a part of it in a presentation. Of course to do any of that, the data has to be downloaded locally. Koha provides you with three (03) options:

  1. As comma separated value (.CSV) file
  2. As a tab separated (.txt) file
  3. As OpenDocument Spreadsheet (.ODS) file

Now, if you are an OpenOffice.org / LibreOffice user, you may be tempted to go for the third option i.e. download the data as an .ods file. While this may look like the best option. It is *not* always so. The biggest problem is that if your report returns a lot of records, then generating the .ODS file is going to take a bit of time. Also, if your system is low on RAM, this can get *really* slow.

On the other hand, the files in .CSV and the .TXT formats are generated and downloaded almost instantly OR at least faster in comparison by several order of magnitude! Given that, which one among the two are your best bet? Well, in our considered opinion, the tab-separated .TXT file is the best. Here is why: if the single quotes in your data are not properly escaped, then your CSV data may be misinterpreted due to the un-escaped single-quote. leading it to split the data that should have been together into separate columns during an import. In contrast, a “tab separated” file will usually work without any issue unlike the CSV file.

So, if you want the data download to be fast and easy to split into columns correctly, the tab-separated .TXT file provides us the best overall option.

FMIRO CCU’s public z39.50 server running on Koha ILS achieves 100% reliability on IRSpy.

Hosted by L2C2 Technologies, FMIRO becomes the 5th Indian entry into IRSpy’s global z39.50 directory.

We are happy to announce the z39.50 service of FMIRO CCU (FOSMA Maritime Institute & Research Organisation, Kolkata branch) has achieved 100% reliability as an open access z39.50 search target for bibliographic materials related to maritime and ship operations. With this, FMIRO CCU becomes the fifth publicly announced z39.50 server from India which is listed on IRSpy service provided by Index Data.

FMIRO CCU’s nascent library is hosted on L2C2 Technologies‘s cloud platform using Koha ILS. The FMIRO OPAC is available at : http://fosma-opac.l2c2.co.in/. The collection at FMIRO is a specialized collection focused solely on topics related to maritime, marine engineering, ship building, ship operations and nautical sciences. It is still a very small collection that is quite literally growing by the day.

Host connection reliability

Host connection reliability measures the reliability of the target only in its ability to respond to connections: the display indicates the number of successful connections in the last two months, the total number of attempted connections in that time, and the percentage of successful connections. For example, reliability of 9/15 = 60% indicates that fifteen attempts have been made to connect to the server in the last two months, of which nine (60%) have been successful. [1]

About IRSpy

IRSpy maintains a global registry of information retrieval targets, about 1295 as per recent count (http://irspy.indexdata.com/stats.html), supporting protocols like ANSI/NISO Z39.50 (ISO 23950) and SRU/SRW web services.

About Index Data

Short answer: The guys who publish the Zebra indexing engine and YAZ toolkit and software libraries.

Long answer: Since 1994, Index Data has offered software development, consulting and integration with a focus on search. Our pioneering involvement in open source and open standards dates back to the first release of the YAZ toolkit for Z39.50 in 1995. [2]

References

[1] IRSpy help: info/reliability

[1] About Index Data

The 5-Minute Series: Setting default messaging preferences for SMS alerts.

Presenting an use-case requiring setting the default messaging preference for SMS alerts sent by Koha.

The problem

Earlier in the day, my professional colleague and friend Joydeep Chanda asked a question. His Koha v3.22.10 installation (at Gurudas College Library) had turned on SMS alert service for its users. The library being a long time Koha user, presented a challenge. He had ~ 6000+ users, so now he and his staff had the unenviable task of having to update the smsalertnumber field in the borrowers table for these 6000+ users. I pointed him to a recent Facebook post by another friend Vimal Kumar Vazaphally. That solved part of his problem, but he still had to choose the default types of SMS messages to be delivered.

Messaging-preferences

So, I pointed him to another post by Vimal – “Use of borrowers-force-messaging-defaults script“. But after a while he complained that while the borrowers-force-messaging-defaults script did set the SMS options, it also enabled *all* of them, he wanted SMS send option to be set only for CHECK-IN and CHECK-OUT.

Description of borrowers-force-messaging-defaults as included in its source:

If the EnhancedMessagingPreferences syspref is enabled after borrowers have been created in the DB, those borrowers won’t have messaging transport preferences default values as defined for their borrower category. So you would have to modify each borrower one by one if you would like to send them ‘Hold Filled’ notice for example.

This script create transport preferences for all existing borrowers and set them to default values defined for the category they belong to.

The solution

The answer lies in correctly assigning advanced messaging preferences by default to a patron category *and then* running the borrowers-force-messaging-defaults script. In order for the patron category edit page display the “Default messaging preferences for this patron category” sub-form, the system preference EnhancedMessagingPreferences needs to be enabled.

The Steps

  1. Check if the EnhancedMessagingPreferences is enabled. If not, then enable it.
  2. Go to Home -> Administration -> Patron categories and select the category to edit.
  3. Scroll down the Modify category form to the “Default messaging preferences for this patron category” section.
  4. Select the checkboxes against the SMSes you want to be sent by default for that category.
  5. Save the changes
  6. Go to a command line terminal and run the borrowers-force-messaging-defaults script. This will ensure that only the defaults are set.

Enjoy!

See also:

[1] “Koha and key lessons of using transactional SMS in India” by L2C2 Technologies

[2] Press release about setting up of SMS alert service at Gurudas College Library.

[3] SMS-Send-IN-Unicel-0.01 at CPAN

Koha quick tip : Duplicating a bibliographic record for a multi-volume book

Yesterday a young colleague called up with a query. She wanted to know how she could create separate bib records for a multiple volume book (e.g. “The Complete Works of Swami Vivekananda” which comes in 8 volumes) by editing the following volume specific info:

  1. ISBN;
  2. page count and physical description;
  3. price;
  4. date of copyright / publication;

while keeping other common information same across the records.

I told her that do this, she would first need to catalog at least *one* volume (preferably the first volume) of the book and then simply duplicating the record and changing the fields she needed to change in each case. This feature is well-documented in the Koha Manual under “Duplicating Records” inside the chapter on Cataloging. Continue reading “Koha quick tip : Duplicating a bibliographic record for a multi-volume book”

FMIRO Kolkata partners with L2C2 Technologies to automate their new library.

FOSMA Maritime Institute & Research Organisation (FMIRO) selects L2C2 Technologies’ Koha support

We are pleased to extend a warm welcome to the newest member of our growing client-partner family in Eastern India – FOSMA Maritime Institute & Research Organisation (FMIRO), Kolkata, a maritime training institute. FMIRO Kolkata has gone live on Koha ILS 16.11 series on L2C2 Technologies‘s cloud hosting platform.

About FOSMA

The Foreign Ship-owners Representatives and Ship Managers Association (FOSMA) was established in India in 1989 to represent foreign owners and ship managers operating in India. Taking in to account that the education, training and competence standards of seafarers is of primary concern and priority of all ship managers in India, the Association established a special purpose vehicle – “FOSMA MARITIME INSTITUTE AND RESEARCH ORGANISATION” (FMIRO), as a non-profit organization under section 25 of the Companies Act, 1958 (now Section 8 of the Companies Act, 2013).

Source: http://www.fosma.in

When “sex” prevents a Koha ILS installation

This is a true story from a recently concluded Koha workshop. There were roughly ~30+ participants and about 15 – 18 computers for their “hands-on” sessions. The instructor-led “how to install Koha 16.11 on Ubuntu 14.04.5” was going along smoothly. However, suddenly all hell broke loose! Everyone, including the instructor were stumped right at nearly the last leg of ‘sudo apt-get install koha-common‘. The install would not complete due to three missing files. First the repos were changed and re-tried. Well… no go! That’s when I noticed that the error was 403 forbidden. Woah! I tried to manually download the files off the repos using a browser and all it said was an “Access denied!” error coming from the Squid proxy.

A closer look at the files gave the game away. The university’s content filtering rules on the Squid proxy was the cause. Apparently the files: (a) libmoosex-markasmethods-perl (b) libmoosex-nonmoose-perl and (c) libwww-youtube-download-perl were being blocked from being fetched. The first two were triggering a false positive on the pornographic filter (the “sex” in libmoosex) and the third was hitting the keyword filter “youtube”, since Youtube was blocked on campus!!!

With no easy way to work around the proxy for connectivity, I manually downloaded the three files using a standby unfiltered link on a single computer. Next I transferred the files on to a pen drive and manually copied them over into each system’s /var/cache/apt/archives and thus fooling apt-get into thinking the files were already downloaded by it. And that is how we saved the day! 😉

Lesson

If you are planning a Koha installfest at an educational institution, please ensure that their content filtering proxy rules are tweaked before actually going ahead with the workshop.

DCB & BI Library, University of Kerala chooses L2C2 Technologies’ Koha hosting service

DCB & BI Library, University of Kerala goes online with Koha Integrated Library System.

We are pleased to welcome the Department of Computational Biology & Bioinformatics, University of Kerala as our newest client-partner from “God’s own country” aka Kerala – the southern most state of India. Earlier the library was running Koha 3.22 on an in-house (on campus) server. With this move, they are now fully hosted on the cloud and are running on the latest major stable version of Koha i.e. on 16.11.x series.

About DCB & BI

The Centre for Bioinformatics, established in 2005 and upgraded as the Department of Computational Biology and Bioinformatics in 2011, is a new generation inter-disciplinary as well as multidisciplinary teaching & research Department of University of Kerala, India. The centre offers a two-year innovative MSc (Computational Biology) programme and also 2 one-year MPhil programmes in (i) Bioinformatics (ii) Computer Aided Drug Design. The Department has researchers with vivid backgrounds (Electrical Engineers, Mathematicians, Physicists, Biotechnologists, Botanists, Bio-chemists, Computer scientists are some of them). The Department has its own premises with state of the art informatics laboratory and also a molecular biology and bio-electronics laboratory which provide a balanced training to multidisciplinary talents that the centre attracts. The Department library having a stock of over 2425 specialized books.

The Director is Dr. Achuthsankar S. Nair, who has lead the department since its inception and presently has 6 lecturers, an Emeritus Professor (Dr. Oommen V. Oommen), one Post Doctoral Fellow, half a dozen Project Fellows, 19 full-time research scholars and at any time, 30-40 masters students. The Department also has 2 adjunct Professors, in addition to visiting faculty and Erudite visitors [Prof. Dr. Johann Deisenhofer (Nobel Laureate – 1988) visited the Department on Dec 1-3, 2010, Prof. Martin Chalfie (Nobel Laureate-2008) visited on Jan 5-7, 2011, followed by Prof. Anders Liljas (Nobel Prize Committee Member) on Jan 20-26, 2011.

The Department is situated in the beautiful and green Kariavattom Campus made greener by the department’s “Trees for 2100 AD” initiative.

Source : DCB & BI website

Accessing the OPAC

While the online public access catalogue (OPAC) is presently available at https://dcb-opac.l2c2.co.in/, this will change in a few days once the dedicated domain procurement process is completed.

Don Bosco School, Park Circus partners with L2C2 Technologies to take their library catalogue online

The first K12 school in eastern India to adopt cloud hosted Koha ILS for their library.

It is our pleasure to welcome Don Bosco School, Park Circus, Kolkata as the newest member of our client-partner family in the eastern India. To the best of our knowledge, Don Bosco School is the first K12 school in entire eastern India to move to a cloud based Koha ILS installation. We thank Fr. Bikash Mondal, the principal, Fr. Anil Toppo (Asst Principal) and other officials at DBPC as well as Sri Anup Choudhury the young, enterprising librarian of the senior section, for their forward thinking.

About Don Bosco School (Park Circus)

Located at 23, Darga Road, Kolkata, India, is an all-boys English medium school imparting education from first through twelfth grade. Established in 1958, it is run by the Salesians of Don Bosco, which is a minority institution within the Catholic Church. The school operates under the Indian Certificate of Secondary Education board. The school officially opened on 15 January 1958 with an intake of 460 boys. The school now has an enrollment of 3000 students. It celebrated its golden jubilee in 2008. [1]

References

[1] Source: https://en.wikipedia.org/wiki/Don_Bosco_School,_Park_Circus

Installing SMS::Send::IN::eSMS send driver for Koha ILS

An easy peasy HOWTO along with a few under-the-hood details explained.

Step #1 : Installing the SMS::Send::IN::eSMS module from CPAN

Login as a sudo user and start the CPAN shell using the command sudo perl -MCPAN -e shell. Install the driver by typing in install SMS::Send::IN::eSMS. If everything works OK, you should see output on screen similar to this:

cpan[1]> install SMS::Send:IN::eSMS
Reading '/root/.cpan/Metadata'
  Database was generated on Thu, 09 Feb 2017 09:41:03 GMT
Running install for module 'SMS::Send::IN::eSMS'
Checksum for /root/.cpan/sources/authors/id/I/IN/INDRADG/SMS-Send-IN-eSMS-0.01.tar.gz ok
Scanning cache /root/.cpan/build for sizes
............................................................................DONE
Configuring I/IN/INDRADG/SMS-Send-IN-eSMS-0.01.tar.gz with Makefile.PL
Checking if your kit is complete...
Looks good
Generating a Unix-style Makefile
Writing Makefile for SMS::Send::IN::eSMS
Writing MYMETA.yml and MYMETA.json
  INDRADG/SMS-Send-IN-eSMS-0.01.tar.gz
  /usr/bin/perl Makefile.PL INSTALLDIRS=site -- OK
Running make for I/IN/INDRADG/SMS-Send-IN-eSMS-0.01.tar.gz
cp lib/SMS/Send/IN/eSMS.pm blib/lib/SMS/Send/IN/eSMS.pm
Manifying blib/man3/SMS::Send::IN::eSMS.3pm
  INDRADG/SMS-Send-IN-eSMS-0.01.tar.gz
  /usr/bin/make -- OK
Running make test
PERL_DL_NONLAZY=1 PERL_USE_UNSAFE_INC=1 /usr/bin/perl "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/checkloginpass.t .. ok
t/checkmsgdest.t .... ok
t/compile.t ......... ok
t/liveaccttest.t .... skipped: No login information available, skipping all tests.
t/pod-coverage.t .... ok
t/pod.t ............. ok
All tests successful.
Files=6, Tests=16,  1 wallclock secs ( 0.09 usr  0.00 sys +  0.99 cusr  0.07 csys =  1.15 CPU)
Result: PASS
  INDRADG/SMS-Send-IN-eSMS-0.01.tar.gz
  /usr/bin/make test -- OK
Running make install
Installing /usr/local/share/perl/5.20.2/SMS/Send/IN/eSMS.pm
Installing /usr/local/man/man3/SMS::Send::IN::eSMS.3pm
Appending installation info to /usr/local/lib/x86_64-linux-gnu/perl/5.20.2/perllocal.pod
  INDRADG/SMS-Send-IN-eSMS-0.01.tar.gz
  /usr/bin/make install  -- OK

cpan[2]>

With the SMS::Send::IN::eSMS module installed, we’ll now set up the Koha side of things.

Step #2 : Making a one-line change to Koha’s SMS.pm

Assumption : That you are using a .deb package based installation. If you are using a git or a tarball installation you probably do not need this guide. 🙂

The code in file /usr/share/koha/lib/C4/SMS.pm is what Koha uses to communicate with the SMS provider (in this case eSMS Kerala from KSITM) via the send driver. This code is capable of accepting two parameters i.e. (a) username and (b) password of the user with the SMS service provider via whom the user wants to send out the messages. However due to Telecom Regulatory Authority of India (TRAI) rules, in India we need to use three parameters, the third one being a mandatory, 6-character, nationally unique senderid allotted to every bulk transactional SMS sender in India. As of version 16.11 Koha can not handle this AS-IS.

Therefore, to make SMS work with Koha in India, we need to make a one-line change to the code. Look for the following code around line no. 80 of the file /usr/share/koha/lib/C4/SMS.pm:

# Create a sender
$sender = SMS::Send->new( $driver,
                          _login    => C4::Context->preference('SMSSendUsername'),
                          _password => C4::Context->preference('SMSSendPassword'),
                    );

Add the following line : _senderid => C4::Context->preference('SMSSendSenderID'),, so that the code looks like this:

# Create a sender
$sender = SMS::Send->new( $driver,
                          _login    => C4::Context->preference('SMSSendUsername'),
                          _password => C4::Context->preference('SMSSendPassword'),
                          _senderid => C4::Context->preference('SMSSendSenderID'),
                    );

Save and close the file. Now login into the staff client and add the four necessary system preferences – (a) SMSSendDriver, (b) SMSSendUsername, (c) SMSSendPassword and (d) SMSSendSenderID. Now, if you are on Koha 3.22 or higher version (i.e. 16.05 or 16.11), you will find the first three under Patron preferences and you only need to create the last one i.e. SMSSendSenderID to complete the setup.

eSMS_02

eSMS_03

However, if you are still using Koha 3.18.x or 3.20.x series then you will need to create three Local use preferences i.e. SMSSendUsername, SMSSendPassword and SMSSendSenderID. Either way, set these four parameters to your actual settings and you are ready to go start using the installed driver.

N.B.This behaviour will change from Koha 17.05 onward (estimated release date May 2017) when the bug number 13029 – “Allow to pass additional parameters to SMS::Send drivers” becomes generally available as part of the stable releases.

Troubleshooting #1 – Missing ‘make’

‘Make’ is required to configure and install the driver. So, if you see an error that reads as

Running make for I/IN/INDRADG/SMS-Send-IN-eSMS-0.01.tar.gz
Can't exec "/usr/bin/make": No such file or directory at /usr/local/share/perl/5                                                                                                             .20.2/CPAN/Distribution.pm line 2197.
  INDRADG/SMS-Send-IN-eSMS-0.01.tar.gz
  /usr/bin/make -- NOT OK
  No such file or directory
Failed during this command:
 INDRADG/SMS-Send-IN-eSMS-0.01.tar.gz         : make NO

Exit from cpan by using the command exit and from the command line install make by entering the command sudo apt-get install make. Once make is installed, run sudo perl -MCPAN -e shell and then proceed with driver installation using the command install SMS::Send::IN::eSMS.

Troubleshooting #2 – CPAN index is out of date

After typing in the command ‘install SMS::Send::IN::eSMS‘ if you find yourself facing the error Warning: Cannot install SMS::Send::IN::eSMS, don’t know what it is., DO NOT panic! It happened to us on one of our test servers too 🙂

It simply means your CPAN index metadata is out-of-date, and you need to refresh the index by running the command ‘reload index‘. After the updated index is fetched, re-run the command install SMS::Send::IN::eSMS. It will work this time.