100% нашли этот документ полезным (3 голоса)
24 просмотров

Kubernetes Programming with Go: Programming Kubernetes Clients and Operators Using Go and the Kubernetes API 1st Edition Philippe Martin All Chapters Instant Download

Go

Загружено:

preszethenl1
Авторское право
© © All Rights Reserved
Доступные форматы
Скачать в формате PDF, TXT или читать онлайн в Scribd
100% нашли этот документ полезным (3 голоса)
24 просмотров

Kubernetes Programming with Go: Programming Kubernetes Clients and Operators Using Go and the Kubernetes API 1st Edition Philippe Martin All Chapters Instant Download

Go

Загружено:

preszethenl1
Авторское право
© © All Rights Reserved
Доступные форматы
Скачать в формате PDF, TXT или читать онлайн в Scribd
Вы находитесь на странице: 1/ 37

Get ebook downloads in full at ebookmeta.

com

Kubernetes Programming with Go: Programming


Kubernetes Clients and Operators Using Go and the
Kubernetes API 1st Edition Philippe Martin

https://ebookmeta.com/product/kubernetes-programming-with-
go-programming-kubernetes-clients-and-operators-using-go-
and-the-kubernetes-api-1st-edition-philippe-martin/

OR CLICK BUTTON

DOWNLOAD NOW

Explore and download more ebook at https://ebookmeta.com


Kubernetes Programming
with Go
Programming Kubernetes Clients
and Operators Using
Go and the Kubernetes API

Philippe Martin
Kubernetes Programming with Go: Programming Kubernetes Clients and Operators
Using Go and the Kubernetes API

Philippe Martin
Blanquefort, France

ISBN-13 (pbk): 978-1-4842-9025-5 ISBN-13 (electronic): 978-1-4842-9026-2


https://doi.org/10.1007/978-1-4842-9026-2

Copyright © 2023 by Philippe Martin


This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the
material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation,
broadcasting, reproduction on microfilms or in any other physical way, and transmission or information
storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now
known or hereafter developed.
Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with
every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an
editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the
trademark.
The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not
identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to
proprietary rights.
While the advice and information in this book are believed to be true and accurate at the date of publication,
neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or
omissions that may be made. The publisher makes no warranty, express or implied, with respect to the
material contained herein.
Managing Director, Apress Media LLC: Welmoed Spahr
Acquisitions Editor: Divya Modi
Development Editor: James Markham
Coordinating Editor: Divya Modi
Copy Editor: Kim Burton Wiseman
Cover designed by eStudioCalamar
Cover image designed by Freepik (www.freepik.com)
Distributed to the book trade worldwide by Springer Science+Business Media New York, 1 New York Plaza,
New York, NY 10004. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail [email protected], or
visit www.springeronline.com. Apress Media, LLC is a California LLC and the sole member (owner) is
Springer Science + Business Media Finance Inc (SSBM Finance Inc). SSBM Finance Inc is a Delaware
corporation.
For information on translations, please e-mail [email protected]; for reprint,
paperback, or audio rights, please e-mail [email protected].
Apress titles may be purchased in bulk for academic, corporate, or promotional use. eBook versions and
licenses are also available for most titles. For more information, reference our Print and eBook Bulk Sales
web page at http://www.apress.com/bulk-sales.
Any source code or other supplementary material referenced by the author in this book is available to readers
on GitHub via the book's product page, located at https://github.com/Apress/Kubernetes-Programming-
with-Go-by-Philippe-Martin. For more detailed information, please visit http://www.apress.com/
source-code.
Printed on acid-free paper
To Mélina and Elsa, my constant source of truth
Table of Contents
About the Author��������������������������������������������������������������������������������������������������� xiii

About the Technical Reviewers�������������������������������������������������������������������������������xv


Acknowledgments�������������������������������������������������������������������������������������������������xvii

Introduction������������������������������������������������������������������������������������������������������������xix

Chapter 1: Kubernetes API Introduction������������������������������������������������������������������� 1


Kubernetes Platform at a Glance�������������������������������������������������������������������������������������������������� 1
OpenAPI Specification������������������������������������������������������������������������������������������������������������������� 3
Verbs and Kinds���������������������������������������������������������������������������������������������������������������������������� 5
Group-Version-Resource��������������������������������������������������������������������������������������������������������������� 6
Sub-resources������������������������������������������������������������������������������������������������������������������������������ 8
Official API Reference Documentation������������������������������������������������������������������������������������������ 9
The Deployment Documentation������������������������������������������������������������������������������������������� 10
Operations Documentation���������������������������������������������������������������������������������������������������� 12
The Pod Documentation�������������������������������������������������������������������������������������������������������� 14
One-Page Version of the Documentation������������������������������������������������������������������������������� 15
Conclusion���������������������������������������������������������������������������������������������������������������������������������� 16

Chapter 2: Kubernetes API Operations������������������������������������������������������������������� 17


Examining Requests������������������������������������������������������������������������������������������������������������������� 17
Making Requests������������������������������������������������������������������������������������������������������������������������ 18
Using kubectl as a Proxy������������������������������������������������������������������������������������������������������� 18
Creating a Resource�������������������������������������������������������������������������������������������������������������� 19
Getting Information About a Resource����������������������������������������������������������������������������������� 20
Getting the List of Resources������������������������������������������������������������������������������������������������ 20

v
Table of Contents

Filtering the Result of a List�������������������������������������������������������������������������������������������������� 21


Deleting a Resource�������������������������������������������������������������������������������������������������������������� 26
Deleting a Collection of Resources���������������������������������������������������������������������������������������� 26
Updating a Resource������������������������������������������������������������������������������������������������������������� 27
Managing Conflicts When Updating a Resource�������������������������������������������������������������������� 28
Using a Strategic Merge Patch to Update a Resource����������������������������������������������������������� 32
Applying Resources Server-side�������������������������������������������������������������������������������������������� 38
Watching Resources�������������������������������������������������������������������������������������������������������������� 44
Filtering During a Watch Session������������������������������������������������������������������������������������������� 45
Watching After Listing Resources������������������������������������������������������������������������������������������ 45
Restarting a watch Request�������������������������������������������������������������������������������������������������� 46
Allowing Bookmarks to Efficiently Restart a watch Request������������������������������������������������� 47
Paginating Results����������������������������������������������������������������������������������������������������������������� 50
Getting Results in Various Formats��������������������������������������������������������������������������������������������� 52
Getting Results as a Table����������������������������������������������������������������������������������������������������� 52
Using the YAML Format��������������������������������������������������������������������������������������������������������� 54
Using the Protobuf Format���������������������������������������������������������������������������������������������������� 54
Conclusion���������������������������������������������������������������������������������������������������������������������������������� 55

Chapter 3: Working with API Resources in Go�������������������������������������������������������� 57


API Library Sources and Import�������������������������������������������������������������������������������������������������� 57
Content of a Package������������������������������������������������������������������������������������������������������������������ 58
types.go��������������������������������������������������������������������������������������������������������������������������������� 58
register.go������������������������������������������������������������������������������������������������������������������������������ 59
doc.go������������������������������������������������������������������������������������������������������������������������������������ 60
generated.pb.go and generated.proto����������������������������������������������������������������������������������� 60
types_swagger_doc_generated.go��������������������������������������������������������������������������������������� 60
zz_generated.deepcopy.go���������������������������������������������������������������������������������������������������� 61
Specific Content in core/v1��������������������������������������������������������������������������������������������������������� 61
ObjectReference�������������������������������������������������������������������������������������������������������������������� 61
ResourceList�������������������������������������������������������������������������������������������������������������������������� 62
Taint��������������������������������������������������������������������������������������������������������������������������������������� 64

vi
Table of Contents

Toleration������������������������������������������������������������������������������������������������������������������������������� 65
Well-Known Labels���������������������������������������������������������������������������������������������������������������� 66
Writing Kubernetes Resources in Go������������������������������������������������������������������������������������������ 67
Importing the Package���������������������������������������������������������������������������������������������������������� 67
The TypeMeta Fields�������������������������������������������������������������������������������������������������������������� 68
The ObjectMeta Fields����������������������������������������������������������������������������������������������������������� 69
Spec and Status�������������������������������������������������������������������������������������������������������������������� 76
Comparison with Writing YAML Manifests����������������������������������������������������������������������������� 76
A Complete Example������������������������������������������������������������������������������������������������������������������� 78
Conclusion���������������������������������������������������������������������������������������������������������������������������������� 83

Chapter 4: Using Common Types���������������������������������������������������������������������������� 85


Pointers��������������������������������������������������������������������������������������������������������������������������������������� 85
Getting the Reference of a Value������������������������������������������������������������������������������������������� 85
Dereferencing a Pointer��������������������������������������������������������������������������������������������������������� 86
Comparing Two Referenced Values��������������������������������������������������������������������������������������� 86
Quantities������������������������������������������������������������������������������������������������������������������������������������ 87
Parsing a String as Quantity�������������������������������������������������������������������������������������������������� 87
Using an inf.Dec as a Quantity����������������������������������������������������������������������������������������������� 88
Using a Scaled Integer as a Quantity������������������������������������������������������������������������������������� 89
Operations on Quantities������������������������������������������������������������������������������������������������������� 90
IntOrString����������������������������������������������������������������������������������������������������������������������������������� 90
Time�������������������������������������������������������������������������������������������������������������������������������������������� 92
Factory Methods�������������������������������������������������������������������������������������������������������������������� 92
Operations on Time���������������������������������������������������������������������������������������������������������������� 92
Conclusion���������������������������������������������������������������������������������������������������������������������������������� 93

Chapter 5: The API Machinery�������������������������������������������������������������������������������� 95


The Schema Package����������������������������������������������������������������������������������������������������������������� 96
Scheme��������������������������������������������������������������������������������������������������������������������������������������� 97
Initialization��������������������������������������������������������������������������������������������������������������������������� 98
Mapping������������������������������������������������������������������������������������������������������������������������������� 100

vii
Table of Contents

Conversion��������������������������������������������������������������������������������������������������������������������������� 101
Serialization������������������������������������������������������������������������������������������������������������������������� 103
RESTMapper����������������������������������������������������������������������������������������������������������������������������� 105
Kind to Resource����������������������������������������������������������������������������������������������������������������� 106
Resource to Kind����������������������������������������������������������������������������������������������������������������� 107
Finding Resources��������������������������������������������������������������������������������������������������������������� 107
The DefaultRESTMapper Implementation���������������������������������������������������������������������������� 107
Conclusion�������������������������������������������������������������������������������������������������������������������������������� 108

Chapter 6: The Client-go Library��������������������������������������������������������������������������� 109


Connecting to the Cluster��������������������������������������������������������������������������������������������������������� 110
In-cluster Configuration������������������������������������������������������������������������������������������������������� 110
Out-of-Cluster Configuration����������������������������������������������������������������������������������������������� 110
Getting a Clientset��������������������������������������������������������������������������������������������������������������������� 115
Using the Clientset�������������������������������������������������������������������������������������������������������������������� 116
Examining the Requests����������������������������������������������������������������������������������������������������������� 119
Creating a Resource������������������������������������������������������������������������������������������������������������������ 120
Getting Information About a Resource�������������������������������������������������������������������������������������� 122
Getting List of Resources���������������������������������������������������������������������������������������������������������� 123
Filtering the Result of a List������������������������������������������������������������������������������������������������������ 125
Setting LabelSelector Using the Labels Package���������������������������������������������������������������� 125
Setting Fieldselector Using the Fields Package������������������������������������������������������������������ 128
Deleting a Resource������������������������������������������������������������������������������������������������������������������ 130
Deleting a Collection of Resources������������������������������������������������������������������������������������������� 133
Updating a Resource����������������������������������������������������������������������������������������������������������������� 134
Using a Strategic Merge Patch to Update a Resource�������������������������������������������������������������� 135
Applying Resources Server-side with Patch����������������������������������������������������������������������������� 138
Server-side Apply Using Apply Configurations�������������������������������������������������������������������������� 140
Building an ApplyConfiguration from Scratch���������������������������������������������������������������������� 142
Building an ApplyConfiguration from an Existing Resource������������������������������������������������ 143

viii
Table of Contents

Watching Resources����������������������������������������������������������������������������������������������������������������� 145


Errors and Statuses������������������������������������������������������������������������������������������������������������������ 149
Definition of the metav1.Status Structure��������������������������������������������������������������������������� 149
Error Returned by Clientset Operations������������������������������������������������������������������������������� 153
RESTClient�������������������������������������������������������������������������������������������������������������������������������� 154
Building the Request����������������������������������������������������������������������������������������������������������� 154
Executing the Request��������������������������������������������������������������������������������������������������������� 161
Exploiting the Result������������������������������������������������������������������������������������������������������������ 161
Getting Result as a Table����������������������������������������������������������������������������������������������������������� 162
Discovery Client������������������������������������������������������������������������������������������������������������������������ 164
RESTMapper����������������������������������������������������������������������������������������������������������������������������� 165
PriorityRESTMapper������������������������������������������������������������������������������������������������������������ 165
DeferredDiscoveryRESTMapper������������������������������������������������������������������������������������������ 167
Conclusion�������������������������������������������������������������������������������������������������������������������������������� 167

Chapter 7: Testing Applications Using Client-go�������������������������������������������������� 169


Fake Clientset��������������������������������������������������������������������������������������������������������������������������� 170
Checking the Result of the Function������������������������������������������������������������������������������������ 171
Reacting to Actions�������������������������������������������������������������������������������������������������������������� 173
Checking the Actions����������������������������������������������������������������������������������������������������������� 177
Fake REST Client����������������������������������������������������������������������������������������������������������������������� 185
FakeDiscovery Client���������������������������������������������������������������������������������������������������������������� 188
Stubbing the ServerVersion������������������������������������������������������������������������������������������������� 189
Actions��������������������������������������������������������������������������������������������������������������������������������� 190
Mocking Resources������������������������������������������������������������������������������������������������������������� 190
Conclusion�������������������������������������������������������������������������������������������������������������������������������� 191

Chapter 8: Extending Kubernetes API with Custom Resources Definitions���������� 193


Performing Operations in Go����������������������������������������������������������������������������������������������������� 194
The CustomResourceDefinition in Detail����������������������������������������������������������������������������������� 195
Naming the Resource���������������������������������������������������������������������������������������������������������� 196
Definition of the Resource Versions������������������������������������������������������������������������������������� 197
Converting Between Versions���������������������������������������������������������������������������������������������� 198
ix
Table of Contents

Schema of the Resource����������������������������������������������������������������������������������������������������������� 199


Deploying a Custom Resource Definition���������������������������������������������������������������������������������� 201
Additional Printer Columns������������������������������������������������������������������������������������������������������� 204
Conclusion�������������������������������������������������������������������������������������������������������������������������������� 207

Chapter 9: Working with Custom Resources�������������������������������������������������������� 209


Generating a Clientset��������������������������������������������������������������������������������������������������������������� 209
Using deepcopy-gen������������������������������������������������������������������������������������������������������������ 211
Using client-gen������������������������������������������������������������������������������������������������������������������ 213
Using the Generated Clientset��������������������������������������������������������������������������������������������� 216
Using the Generated fake Clientset������������������������������������������������������������������������������������� 217
Using the Unstructured Package and Dynamic Client��������������������������������������������������������������� 217
The Unstructured Type��������������������������������������������������������������������������������������������������������� 217
The UnstructuredList Type��������������������������������������������������������������������������������������������������� 221
Converting Between Typed and Unstructured Objects�������������������������������������������������������� 223
The Dynamic Client�������������������������������������������������������������������������������������������������������������� 223
Conclusion�������������������������������������������������������������������������������������������������������������������������������� 229

Chapter 10: Writing Operators withthe Controller-­Runtime Library��������������������� 231


The Manager����������������������������������������������������������������������������������������������������������������������������� 232
The Controller��������������������������������������������������������������������������������������������������������������������������� 235
Creating a Controller����������������������������������������������������������������������������������������������������������� 236
Watching Resources������������������������������������������������������������������������������������������������������������ 237
A First Example������������������������������������������������������������������������������������������������������������������� 241
Using the Controller Builder������������������������������������������������������������������������������������������������ 244
A Second Example Using the ControllerBuilder������������������������������������������������������������������� 245
Injecting Manager Resources into the Reconciler��������������������������������������������������������������� 247
Using the Client������������������������������������������������������������������������������������������������������������������������� 250
Getting Information About a Resource��������������������������������������������������������������������������������� 250
Listing Resources���������������������������������������������������������������������������������������������������������������� 251
Creating a Resource������������������������������������������������������������������������������������������������������������ 254
Deleting a Resource������������������������������������������������������������������������������������������������������������ 254

x
Table of Contents

Deleting a Collection of Resources�������������������������������������������������������������������������������������� 255


Updating a Resource����������������������������������������������������������������������������������������������������������� 256
Patching a Resource������������������������������������������������������������������������������������������������������������ 256
Updating the Status of a Resource�������������������������������������������������������������������������������������� 259
Patching the Status of a Resource�������������������������������������������������������������������������������������� 260
Logging������������������������������������������������������������������������������������������������������������������������������������� 261
Verbosity������������������������������������������������������������������������������������������������������������������������������ 262
Predefined Values���������������������������������������������������������������������������������������������������������������� 262
Logger Name����������������������������������������������������������������������������������������������������������������������� 262
Getting the Logger from Context����������������������������������������������������������������������������������������� 263
Events��������������������������������������������������������������������������������������������������������������������������������������� 263
Conclusion�������������������������������������������������������������������������������������������������������������������������������� 265

Chapter 11: Writing the Reconcile Loop��������������������������������������������������������������� 267


Writing the Reconcile Function������������������������������������������������������������������������������������������������� 268
Checking Whether the Resource Exists������������������������������������������������������������������������������� 268
Implementing the Reconciled Resource������������������������������������������������������������������������������ 268
Simple Implementation Example����������������������������������������������������������������������������������������� 270
Conclusion�������������������������������������������������������������������������������������������������������������������������������� 275

Chapter 12: Testing the Reconcile Loop��������������������������������������������������������������� 277


The envtest Package����������������������������������������������������������������������������������������������������������������� 277
Installing envtest Binaries��������������������������������������������������������������������������������������������������� 277
Using envtest����������������������������������������������������������������������������������������������������������������������� 278
Defining a ginkgo Suite������������������������������������������������������������������������������������������������������������� 279
Writing the Tests����������������������������������������������������������������������������������������������������������������������� 283
Test 1����������������������������������������������������������������������������������������������������������������������������������� 284
Test 2����������������������������������������������������������������������������������������������������������������������������������� 285
Test 3����������������������������������������������������������������������������������������������������������������������������������� 285
Test 4����������������������������������������������������������������������������������������������������������������������������������� 285
Conclusion�������������������������������������������������������������������������������������������������������������������������������� 290

xi
Table of Contents

Chapter 13: Creating an Operator with Kubebuilder�������������������������������������������� 291


Installing Kubebuilder��������������������������������������������������������������������������������������������������������������� 291
Creating a Project��������������������������������������������������������������������������������������������������������������������� 291
Adding a Custom Resource to the Project�������������������������������������������������������������������������������� 293
Building and Deploying Manifests�������������������������������������������������������������������������������������������� 295
Running the Manager Locally��������������������������������������������������������������������������������������������������� 295
Personalizing the Custom Resource����������������������������������������������������������������������������������������� 296
Editing the Go Structures���������������������������������������������������������������������������������������������������� 297
Enabling the Status Subresource���������������������������������������������������������������������������������������� 297
Defining Printer Columns����������������������������������������������������������������������������������������������������� 297
Regenerating the Files�������������������������������������������������������������������������������������������������������� 298
Implementing the Reconcile Function�������������������������������������������������������������������������������������� 299
Adding RBAC Annotations��������������������������������������������������������������������������������������������������������� 299
Deploying the Operator on the Cluster�������������������������������������������������������������������������������������� 300
Creating a New Version of the Resource����������������������������������������������������������������������������������� 301
Defining a New Version������������������������������������������������������������������������������������������������������� 302
Implementing Hub and Convertible������������������������������������������������������������������������������������� 303
Setting Up the webhook������������������������������������������������������������������������������������������������������ 305
Updating kustomization Files���������������������������������������������������������������������������������������������� 306
Using Various Versions�������������������������������������������������������������������������������������������������������� 306
Conclusion�������������������������������������������������������������������������������������������������������������������������������� 308

Index��������������������������������������������������������������������������������������������������������������������� 309

xii
About the Author
Philippe Martin has been working with Kubernetes for
five years, first by creating an Operator to deploy video
CDNs into the cloud, later helping companies deploy their
applications into Kubernetes, then writing a Client to help
developers work in a Kubernetes environment. Philippe
has passed the CKAD, CKA, and CKS certifications. He has
extensive experience with distributed systems and open-
source software: he started his career 20 years ago creating
thin clients based on the Linux kernel and open-­source
components. He is currently working at Red Hat on the
Development Tools team.
Philippe has been active in the development of Kubernetes, especially its
documentation, and participates in the translation of the official documentation into
French, has edited two reference books about the Kubernetes API and kubectl, and is
responsible for the French translation of the Kubernetes Dashboard. He participated in
Google Season of Docs to create the new Kubernetes API Reference section of the official
documentation and is maintaining it.

xiii
About the Technical Reviewers
Bartosz Majsak writes code for fun and profit while proudly
wearing a red fedora (also known as the Red Hat). He has
been long-time open-source contributor and Java developer
turned into Golang aficionado. Bartosz is overly enthusiastic
about coffee, open source, and speaking at conferences,
not necessarily in that order. One thing that perhaps proves
he is not a total geek is his addiction to alpine skiing (and
running).

Prasanth is a Blockchain Certified Professional, Professional


Scrum Master, and Microsoft Certified Trainer who is
passionate about helping others learn how to use and gain
benefits from the latest technologies. He is a thought leader
and practitioner in Blockchain, Cloud, and Scrum. He also
handles the Agile Methodology, Cloud, and Blockchain
technology community initiatives within TransUnion
through coaching, mentoring, and grooming techniques.
Prasanth is an adjunct professor and a technical speaker.
He was selected as a speaker at the China International
Industry Big Data Expo 2018 by the Chinese government and also was invited to the
International Blockchain Council by the Government of Telangana and Goa. In addition,
he received accolades from the Chinese government for his presentation at China
International Industry Big Data Expo 2018. Prasanth has published his Patent, entitled
“Digital Educational Certificate Management System Using IPFS-Based Blockchain.”
To date, he has interacted extensively, reaching more than 50,000 students,
mostly within the technical domain. Prasanth is a working group member of the
CryptoCurrency Certification Consortium, the Scrum Alliance, the Scrum Organization,
and the International Institute of Business Analysis.

xv
Acknowledgments
I would like to thank the whole Anevia “CDN” team who started working with me on
Kubernetes back in 2018: David, Ansou, Hossam, Yassine, Étienne, Jason, and Michaël.
Special thanks to Damien Lucas for initiating this project and for having trusted us with
this challenge.
My discovery of Kubernetes has been much easier and pleasant thanks to the TGIK
channel and its numerous episodes, hosted by Joe Beda, Kris Nova, and many others.
Plus, thanks to all the Kubernetes community for such a great ecosystem!

xvii
Other documents randomly have
different content
belly. The drivers run behind them with a short stick, punching them
from time to time, or giving them a sharp pinch on the rump. Very
few of them own their donkeys, and I understood their pertinacity
when I learned that they frequently received a beating on returning
home in the evening empty-handed.
The passage of the bazaars seems at first quite as hazardous on
donkey-back as on foot, but it is the difference between knocking
somebody down and being knocked down yourself, and one
naturally prefers the former alternative. There is no use in attempting
to guide the donkey, for he won’t be guided. The driver shouts
behind, and you are dashed at full speed into a confusion of other
donkeys, camels, horses, carts, water-carriers and footmen. In vain
you cry out: “Bess!” (enough!) “Piano!” and other desperate
adjurations; the driver’s only reply is: “Let the bridle hang loose!” You
dodge your head under a camel-load of planks; your leg brushes the
wheel of a dust-cart; you strike a fat Turk plump in the back; you
miraculously escape upsetting a fruit-stand; you scatter a company
of spectral, white-masked women, and at last reach some more quiet
street, with the sensation of a man who has stormed a battery. At
first this sort of riding made me very nervous, but finally I let the
donkey go his own way, and took a curious interest in seeing how
near a chance I ran of striking or being struck. Sometimes there
seemed no hope of avoiding a violent collision, but by a series of the
most remarkable dodges he generally carried me through in safety.
The cries of the driver, running behind, gave me no little amusement:
“The Howadji comes! Take care on the right hand! take care on the
left hand! O man, take care! O maiden, take care! O boy, get out of
the way! The Howadji comes!” Kish had strong lungs and his donkey
would let nothing pass him, and so, wherever we went, we
contributed our full share to the universal noise and confusion.
Cairo is the cleanest of all oriental cities. The regulations
established by Mohammed Ali are strictly carried out. Each man is
obliged to sweep before his own door, and the dirt is carried away in
carts every morning. Besides this, the streets are watered several
times a day, and are nearly always cool and free from dust. The
constant evaporation of the water, however, is said to be injurious to
the eyes of the inhabitants, though in other respects the city is
healthy. The quantity of sore-eyed, cross-eyed, one-eyed, and totally
blind persons one meets every where, is surprising. There are some
beggars, mostly old or deformed, but by no means so abundant or
impertinent as in the Italian cities. A number of shabby policemen, in
blue frock-coats and white pantaloons, parade the principal
thoroughfares, but I never saw their services called into requisition.
The soldiers, who wear a European dress of white cotton, are by far
the most awkward and unpicturesque class. Even the Fellah, whose
single brown garment hangs loose from his shoulders to his knees,
has an air of dignity compared with these Frankish caricatures. The
genuine Egyptian costume, which bears considerable resemblance
to the Greek, and especially the Hydriote, is simple and graceful.
The colors are dark—principally brown, blue, green and violet—
relieved by a heavy silk sash of some gay pattern, and by the red
slippers and tarboosh. But, as in Turkey, the Pashas and Beys, and
many of the minor officers of the civil departments have adopted the
Frank dress, retaining only the tarboosh,—a change which is by no
means becoming to them. I went into an Egyptian barber-shop one
day, to have my hair shorn, and enjoyed the preparatory pipe and
coffee in company with two individuals, whom I supposed to be
French or Italians of the vulgar order, until the barber combed out the
long locks on the top of their head, by which Mussulmen expect to
be lifted up into Paradise. When they had gone, the man informed
me that one was Khalim Pasha, one of the grandsons of Mohammed
Ali, and the other a Bey, of considerable notoriety. The Egyptians
certainly do not gain any thing by adopting a costume which, in this
climate, is neither so convenient nor so agreeable as their own.
Besides the animated life of the bazaars, which I had an
opportunity of seeing, in making my outfit for the winter’s journey, I
rarely went out without witnessing some incident or ceremony
illustrative of Egyptian character and customs. One morning I
encountered a stately procession, with music and banners,
accompanying a venerable personage, with a green turban on his
head and a long white beard flowing over his breast. This, as Kish
assured me, was the Shereef of Mecca. He was attended by officers
in the richest Turkish and Egyptian costumes, mounted on splendid
Arabian steeds, who were almost hidden under their broad housings
of green and crimson velvet, embroidered with gold. The people on
all sides, as he passed, laid their hands on their breasts and bowed
low, which he answered by slowly lifting his hand. It was a simple
motion, but nothing could have been more calm and majestic.
On another occasion, I met a bridal procession in the streets of
Boulak. Three musicians, playing on piercing flutes, headed the
march, followed by the parents of the bride, who, surrounded by her
maids, walked under a crimson canopy. She was shrouded from
head to foot in a red robe, over which a gilded diadem was fastened
around her head. A large crowd of friends and relatives closed the
procession, close behind which followed another, of very different
character. The chief actors were four boys, of five or six years old, on
their way to be circumcised. Each was mounted on a handsome
horse, and wore the gala garments of a full-grown man, in which
their little bodies were entirely lost. The proud parents marched by
their sides, supporting them, and occasionally holding to their lips
bottles of milk and sherbet. One was a jet black Nubian, who
seemed particularly delighted with his situation, and grinned on all
sides as he passed along. This procession was headed by a
buffoon, who carried a laugh with him which opened a ready
passage through the crowd. A man followed balancing on his chin a
long pole crowned with a bunch of flowers. He came to me for
backsheesh. His success brought me two swordsmen out of the
procession, who cut at each other with scimitars and caught the
blows on their shields. The coolness, swiftness and skill with which
they parried the strokes was really admirable, and the concluding
flourish was a masterpiece. One of them, striking with the full sweep
of his arm, aimed directly at the face of the other, as if to divide his
head into two parts; but without making a pause, the glittering
weapon turned, and sliced the air within half an inch of his eyes. The
man neither winked nor moved a muscle of his face, but after the
scimitar had passed, dashed it up with his shield, which he then
reversed, and dropping on one knee, held to me for backsheesh.
After these came a camel, with a tuft of ostrich feathers on his head
and a boy on his back, who pounded vigorously on two wooden
drums with one hand, while he stretched the other down to me for
backsheesh. Luckily the little candidates for circumcision were too
busily engaged with their milk bottles and sugar-plums, to join in the
universal cry.
I had little time to devote to the sights of Cairo, and was obliged to
omit the excursions to the Petrified Forest, to Heliopolis and Old
Cairo, until my return. Besides the city itself, which was always full of
interest, I saw little else except the Citadel and the Island of Rhoda.
We took the early morning for our ride to the former place, and were
fortunate enough to find our view of the Nile-plain unobscured by the
mists customary at this season. The morning light is most favorable
to the landscape, which lies wholly to the westward. The shadows of
the Citadel and the crests of the Mokattam Hills then lie broad and
cool over the city, but do not touch its minarets, which glitter in the air
like shafts of white and rosy flame. The populace is up and stirring,
and you can hear the cries of the donkeymen and water-carriers
from under the sycamores and acacias that shade the road to
Boulak. Over the rich palm-gardens, the blue streak of the river and
the plain beyond, you see the phantoms of two pyramids in the haze
which still curtains the Libyan Desert. Northward, beyond the parks
and palaces of Shoobra, the Nile stretches his two great arms
toward the sea, dotted, far into the distance, with sails that flash in
the sun. From no other point, and at no other time, is Cairo so grand
and beautiful.
Within the walls of the Citadel is the Bir Youssef—Joseph’s Well—
as it is called by the Arabs, not from the virtuous Hebrew, but from
Sultan Saladin, who dug it out and put it in operation. The well itself
dates from the old Egyptian time, but was filled with sand and
entirely lost for many centuries. It consists of an upper and lower
shaft, cut through the solid rock, to the depth of two hundred and
sixty feet. A winding gallery, lighted from the shaft, extends to the
bottom of the first division, where, in a chamber cut in the rock, a
mule turns the large wheel which brings up a continual string of
buckets from the fountain below. The water is poured into a spacious
basin, and carried thence to the top by another string of buckets set
in motion at the surface. Attended by two Arabs with torches, we
made the descent of the first shaft and took a drink of the fresh, cool
fluid. This well, and the spot where the Mameluke Emin Bey jumped
his horse over the wall and escaped the massacre of his comrades,
are the only interesting historical points about the Citadel; and the
new mosque of Mohammed Ali, which overlooks the city from the
most projecting platform of the fortifications, is the only part which
has any claim to architectural beauty. Although it has been in
process of erection for many years, this mosque is not nearly
completed internally. The exterior is finished, and its large, white,
depressed dome, flanked by minarets so tall and reed-like that they
seem ready to bend with every breeze, is the first signal of Cairo to
travellers coming up or down the Nile. The interior walls are lined
throughout with oriental alabaster, stained with the orange flush of
Egyptian sunsets, and the three domes blaze with elaborate
arabesques of green, blue, crimson and gold. In a temporary
chamber, fitted up in one corner, rests the coffin of Mohammed Ali,
covered with a heavy velvet pall, and under the marble arches
before it, a company of priests, squatted on the green carpet
covering the floor, bow their heads continually and recite prayers or
fragments of the Koran.
Before descending into the city, I rode a little way into the Desert
to the tombs of the Caliphs, on the road to Suez. They consist mostly
of stone canopies raised on pillars, with mosques or oratories
attached to them, exhibiting considerable variety in their design, but
are more curious than impressive. The track in the sand made by the
pilgrims to Mecca and the overland passengers to Suez, had far
more real interest in my eyes. The pilgrims are fewer, and the
passengers more numerous, with each successive year. English-
built omnibuses, whirled along by galloping post-horses, scatter the
sand, and in the midst of the herbless Desert, the travellers regale
themselves with beef-steak and ale, and growl if the accustomed
Cheshire is found wanting. At this rate, how long will it be before
there is a telegraph-station in Mecca, and the operator explodes with
his wire a cannon on the Citadel of Cairo, to announce that the
prayers on Mount Arafat have commenced?
The Island of Rhoda, which I visited on a soft, golden afternoon, is
but a reminiscence of what it was a few years ago. Since Ibrahim
Pasha’s death it has been wholly neglected, and though we found a
few gardeners at work, digging up the sodden flower-beds and
clipping the rank myrtle hedges, they only served to make the
neglect more palpable. During the recent inundation, the Nile had
risen to within a few inches of covering the whole island, and the soil
was still soft and clammy. Nearly all the growths of the tropics are
nurtured here; the coffee, the Indian fig, the mango, and other trees
alternate with the palm, orange, acacia, and the yellow mimosa,
whose blossoms make the isle fragrant. I gathered a bunch of roses
and jasmine-flowers from the unpruned vines. In the centre of the
garden is an artificial grotto lined with shells, many of which have
been broken off and carried away by ridiculous tourists. There is no
limit to human silliness, as I have wisely concluded, after seeing
Pompey’s Pillar disfigured by “Isaac Jones” (or some equally classic
name), in capitals of black paint, a yard long, and finding “Jenny
Lind” equally prominent on the topmost stone of the great Pyramid
(Of course, the enthusiastic artist chiselled his own name beside
hers.) A mallet and chisel are often to be found in the outfits of
English and American travellers, and to judge from the frequency of
certain names, and the pains bestowed upon their inscription, the
owners must have spent the most of their time in Upper Egypt, in
leaving records of their vulgar vanity.
CHAPTER IV.
PREPARATIONS FOR THE JOURNEY INTO
CENTRAL AFRICA.

Necessity of Leaving Immediately—Engaging a Boat—The Dragomen—


Achmet el Saïdi—Funds—Information—Procuring an Outfit—
Preparing for the Desert—The Lucky Day—Exertions to Leave—Off!

I devoted but little time to seeing Cairo, for the travelling season
had arrived, and a speedy departure from Cairo was absolutely
necessary. The trip to Khartoum occupies at least two months and it
is not safe to remain there later than the first of March, on account of
the heat and the rainy season, which is very unhealthy for strangers.
Dr. Knoblecher, the Catholic Apostolic Vicar for Central Africa, had
left about a month previous, on his expedition to the sources of the
White Nile. I therefore went zealously to work, and in five days my
preparations were nearly completed. I prevailed upon the European
of our triad, who had intended proceeding no further than Cairo, to
join me for the voyage to Assouan, on the Nubian frontier, and our
first care was to engage a good dahabiyeh, or Nile-boat. This
arrangement gave me great joy, for nowhere is a congenial comrade
so desirable as on the Nile. My friend appreciated the river, and
without the prospect of seeing Thebes, Ombos and Philæ, would
have cheerfully borne all the inconveniences and delays of the
journey, for the Nile’s sake alone. Commend me to such a man, for
of the hundreds of tourists who visit the East, there are few such! On
my arrival, I had found that the rumors I had heard on the road
respecting the number of travellers and the rise in the price of boats,
were partially true. Not more than a dozen boats had left for Upper
Egypt, but the price had been raised in anticipation. The ship
carpenters and painters were busily employed all along the shore at
Boulak, in renovating the old barks or building new ones, and the
Beys and Pashas who owned the craft were anticipating a good
harvest. Some travellers paid forty-five pounds a month for their
vessels, but I found little difficulty in getting a large and convenient
boat, for two persons, at twenty pounds a month. This price, it should
be understood, includes the services of ten men, who find their own
provisions, and only receive a gratuity in case of good behavior. The
American Consul, Mr. Kahil, had kindly obtained for me the promise
of a bark from Ismaïl Pasha, before our arrival—a superb vessel,
furnished with beds, tables, chairs and divans, in a very handsome
style—which was offered at thirty pounds a month, but it was much
larger than we needed. In the course of my inspection of the fleet of
barks at Boulak, I found several which might be had at fifteen, and
seventeen pounds a month, but they were old, inconvenient, and full
of vermin. Our boat, which I named the Cleopatra, had been newly
cleansed and painted, and contained, besides a spacious cabin, with
beds and divans, a sort of portico on the outside, with cushioned
seats, where we proposed to sit during the balmy twilights, and
smoke our shebooks.
Without a tolerable knowledge of Arabic, a dragoman is
indispensable. The few phrases I had picked up, on the way from
Alexandria, availed me little, and would have been useless in Nubia,
where either the Berberi language, or a different Arabic dialect is
spoken; and I therefore engaged a dragoman for the journey. This
class of persons always swarm in Cairo, and I had not been there a
day before I was visited by half a dozen, who were anxious to make
the trip to Khartoum. How they knew I was going there, I cannot
imagine; but I found that they knew the plans of every traveller in
Cairo as well. I endeavored to find one who had already made the
journey, but of all who presented themselves, only two had been
farther than the second Cataract. One of these was a Nubian, who
had made a trip with the Sennaar merchants, as far as Shendy, in
Ethiopia; but he had a sinister, treacherous face, and I refused him at
once. The other was an old man, named Suleyman Ali, who had
been for three years a servant of Champollion, whose certificate of
his faithfulness and honesty he produced.
He had been three years in Sennaar, and in addition to Italian, (the
only Frank tongue he knew), spoke several Ethiopian dialects. He
was a fine, venerable figure, with an honest face, and I had almost
decided to take him, when I learned that he was in feeble health and
would scarcely be able to endure the hardships of the journey. I
finally made choice of a dark Egyptian, born in the valley of Thebes.
He was called Achmet el Saïdi, or Achmet of Upper Egypt, and when
a boy had been for several years a servant in the house of the
English Consul at Alexandria. He spoke English fluently, as well as a
little Italian and Turkish. I was first attracted to him by his bold, manly
face, and finding that his recommendations were excellent, and that
he had sufficient spirit, courage and address to serve us both in case
of peril, I engaged him, notwithstanding he had never travelled
beyond Wadi Halfa (the Second Cataract). I judged, however, that I
was quite as familiar with the geography of Central Africa as any
dragoman I could procure, and that, in any case, I should find it best
to form my own plans and choose my own paths. How far I was
justified in my choice, will appear in the course of the narrative.
The next step was to procure a double outfit—for the Nile and the
Desert—and herein Achmet, who had twice made the journey to
Mount Sinai and Petra, rendered me good service. I had some
general knowledge of what was necessary, but without the
advantage of his practical experience, should have been very
imperfectly prepared. As it was, many things were forgotten in the
haste of departure, the need of which I felt when it was too late to
procure them. I had been prudent enough, when in Vienna, to
provide myself with Berghaus’s great map of Arabia and the Valley of
the Nile, which, with a stray volume of Russegger, were my only
guides. In Khartoum, afterwards, I stumbled upon a copy of
Hoskins’s Ethiopia. The greater part of my funds I changed into
Egyptian silver medjids, colonnati, or Spanish pillar-dollars, and the
Austrian dollar of Maria Theresa, all of which are current as far as
Sennaar and Abyssinia. I also procured five hundred piastres in
copper pieces of five paràs (about half a cent) each, which were
contained in a large palm-basket, and made nearly an ass’s load. In
addition to these supplies, I obtained from an Armenian merchant a
letter of credit on his brother in Khartoum, for two thousand piastres,
on which, he gave me to understand. I should be obliged to pay a
discount of twenty per cent. I endeavored, but in vain, to procure
some information relative to the cost of travelling in Nubia and the
countries beyond. The Frank merchants knew nothing, except that
the expenses were vast, and predicted that the sum I took would
prove insufficient and that I should certainly become involved in
great difficulties and embarrassments. The native merchants who
had made the journey were all jealous of a foreign traveller
attempting to penetrate into their peculiar domain, and gave me no
satisfactory information, while to the imagination of the Cairenes,
Sennaar is the utmost verge of the world, and he who has been
there and returned in safety, enjoys the special protection of Allah.
Even Achmet, although he showed no signs of fear, and did not
hesitate to accompany me, informed his family and friends that we
were going no further than Wadi Halfa, for he said they would
certainly detain him by force, should they learn the truth.
I did not think it necessary to obtain a firman from Abbas Pasha,
which might readily have been procured. The American, English and
Austrian Consuls kindly gave me letters to the principal Consular
agents and merchants in Khartoum, besides which, Achmet
professed to have some acquaintance with Lattif Pasha, who was
then Pasha of Soudân. To the Hon. Mr. Murray, the English Consul-
General, and Mr. Constantine Kahil, the American Vice-Consul at
Cairo, I was especially indebted for favors. The former intrusted me
with despatches for Khartoum and Obeid, in Kordofan, and the latter
furnished me with letters to the Governors of Thebes, Assouan and
Korosko, asking the latter to insure my safety on the journey through
the Nubian Desert. Thus prepared, I anticipated no further trouble on
the road than from hard-trotting camels, sand, brackish water, and
the like privations, which are easily borne.
The furnishing of a Nile-boat requires considerable knowledge of
housekeeping. The number of small articles required for this floating
speck of civilization in a country of barbarians, is amazing to a
bachelor. I had no idea that the art of cooking needed such a variety
of tools and appliances, and for the first time in my life, conceived
some respect for the fame of Ude and Soyer. There are frying-pans
and stew-pans; coffee-pots and tea-pots; knives, forks, spoons,
towels, cups, ladles and boxes; butter, lard, flour, rice, macaroni, oil,
vinegar, mustard and pepper; and no end to the groceries. We must
have a table and chairs, quilts and pillows, mats, carpets and
napkins, and many other articles which I should never have thought
of without the help of Achmet and of M. Pini, who keeps a general
dépôt of supplies. His printed lists, in four languages, lighten the
traveller’s labor very greatly. His experience in regard to the quantity
required, is also of much service; otherwise an inexperienced person
would not know whether to take twelve or fifty pounds of rice, nor
how much sugar belonged to so much coffee. The expense of our
outfit, including bread, fowls, mutton, charcoal, and every other
requisite, was about two thousand piastres—a little more than one
hundred dollars. The calculation was made for one month’s
provisions for two persons.
For my further journey after leaving the Nile, I was recommended
to take a large supply, on account of the scarcity and expense of
many articles in Upper Nubia and Sennaar. I therefore purchased
sufficient tea, coffee, flour, rice, biscuits, sugar, macaroni and dried
fruit to last me two months, beside a complete canteen, or supply of
articles necessary for life in the desert. I took an extra quantity of
gunpowder, tobacco and coffee, for presents to the Arab shekhs.
The entire cost of this outfit was about nine hundred piastres. In
addition, I procured a good Turkish tent for two hundred and fifty
piastres, to which I added a supply of tent-pins, lantern-poles, water-
skins, and leathern water-flasks, all these articles being procured to
better advantage in Cairo. I did not propose adopting the Egyptian
costume until I had made some progress in the language, and
therefore contented myself with purchasing a bornous of camel’s
hair, a sabre, a broad shawl of Tripoli silk, for the waist, and shoes of
white leather, which are very cool and comfortable. I also followed
the custom of the European residents, in having my hair shorn close
to the head, and wearing a white cotton skull-cap. Over this was
drawn the red tarboosh, or fez, and as a protection against the sun, I
bound a large white shawl around it, which was my first lesson in
turban-making.
Achmet, influenced by a superstition which is not peculiar to the
East, begged me to hasten our preparations, in order that we might
leave Boulak on Monday, which day, he averred, was the luckiest in
the week, and would render our journey prosperous from beginning
to end. Knowing from experience that half the success of the journey
is in the start, and believing that it is better to have superstition with
you than against you, I determined to gratify him. He was as zealous
as I could wish, and we rested not from morning to night, until at last,
from the spirit with which we labored, it seemed almost a matter of
life and death, that the boat should leave on Monday. I had a clause
inserted in our written contract with the captain, that he should forfeit
a day’s rent, in case he was not ready at the appointed hour; but, in
spite of this precaution Achmet, who well knew the indifference of the
Arab nature, was constantly on his track. Two or three times a day
he galloped to Boulak, to hasten the enlistment of the men, the
baking of bread for the voyage, the furbishing of the cabin, and the
overhauling of the sails, oars and rigging. My European friends in
Cairo smiled at our display of activity, saying that such a thing had
never been known, as a boat sailing at the appointed time, and that I
was fatiguing myself to no purpose.
Monday (Nov. 17th) came, and the Egyptian cook, Salame, whom
we had engaged for the Nile voyage, was despatched to the markets
to lay in a supply of fowls, eggs, butter and vegetables. My letters
home—the last I expected to send, for months to come—were
committed to the Post Office, and after an early dinner, we saw our
baggage and stores laden upon carts and started for Boulak, under
Achmet’s guidance. We took leave of the few friends we had made
in Cairo, and followed. The Cleopatra was still lying in the midst of a
crowd of dahabiyehs, but the American flag, hoisted at the peak of
her little mizzenmast, was our “cornet,” proclaiming departure. We
found Achmet unjacketed and unturbaned, stowing away the stores,
with one eye on the raïs, and another (as it seemed to me) on each
of the tardy sailors. There was still charcoal to be bought, and bois
gras for kindling fires, and clubs for the men, to prevent invasions
from the shore, with many more of those wants which are never
remembered until the last moment. The afternoon wore away; the
shadows of the feathery date-trees on the island of Rhoda stretched
long and cool across the Nile; but before the sun had touched the
tops of the Pyramids, we had squeezed out from the shipping of
Boulak, and were slowly working up the Nile before a light wind,
while our boatmen thumped the tarabooka, and sang their wild Arab
songs of departure. The raïs came up to know whether he had not
fulfilled his contract, and Achmet with a cheerful face, turned to me
and said: “Praised be Allah, master! we shall have a lucky journey.”
Achmet.
CHAPTER V.
THE PYRAMIDS AND MEMPHIS.

Howling Dervishes—A Chicken Factory—Ride to the Pyramids—Quarrel


with the Arabs—The Ascent—View from the Summit—Backsheesh—
Effect of Pyramid climbing—The Sphinx—Playing the Cadi—We
obtain Justice—Visit to Sakkara and the Mummy Pits—The
Exhumation of Memphis—Interview with M. Mariette—Account of his
Discoveries—Statue of Rameses II.—Return to the Nile.

“And Morning opes in haste her lids,


To gaze upon the Pyramids.”—Emerson.

We went no further than the village of Gizeh, three or four miles


above Cairo, on the first evening, having engaged our donkeys and
their drivers to meet us there and convey us to the Pyramids on the
following morning. About dusk, the raïs moored our boat to the bank,
beside a College of dervishes, whose unearthly chants, choruses
and clapping of hands, were prolonged far into the night. Their wild
cries, and deep, monotonous bass howlings so filled our ears that
we could not choose but listen, and, in spite of our fatigue sleep was
impossible. After performing for several hours, they gradually
ceased, through sheer exhaustion, though there was one tough old
dervish, who continued to gasp out, “Allah! Allah!” with such a
spasmodic energy, that I suspected it was produced by the
involuntary action of his larynx, and that he could not have stopped,
even had he been so minded.
When we threw open the latticed blinds of our cabin, before
sunrise, the next morning, the extraordinary purity of the air gave rise
to an amusing optical delusion on the part of my friend. “See that
wall!” said he, pointing to a space between two white houses; “what
a brilliant color it is painted, and how those palms and these white
houses are relieved against it!” He was obliged to look twice before
he perceived that what he had taken for a wall close at hand, was
really the sky, and rested upon a far-off horizon. Our donkeys were in
readiness on the bank, and I bestrode the same faithful little gray
who had for three days carried me through the bazaars of Cairo. We
left orders for the raïs to go on to Bedracheyn, a village near the
supposed site of Memphis, and taking Achmet with us, rode off gayly
among the mud hovels and under the date-trees of Gizeh, on our
way to the Pyramids. Near the extremity of the village, we entered
one of the large chicken-hatching establishments for which the place
is famed, but found it empty. We disturbed a numerous family of
Fellahs, couched together on the clay floor, crept on our hands and
knees through two small holes and inspected sundry ovens covered
with a layer of chaff, and redolent of a mild, moist heat and a
feathery smell. The owner informed us that for the first four or five
days the eggs were exposed to smoke as well as heat, and that
when the birds began to pick the shell, which generally took place in
fifteen days, they were placed in another oven and carefully
accouched.
The rising sun shone redly on the Pyramids, as we rode out on the
broad harvest land of the Nile. The black, unctuous loam was still too
moist from the inundation to be ploughed, except in spots, here and
there, but even where the water had scarce evaporated, millions of
germs were pushing their slender blades up to the sunshine. In that
prolific soil, the growth of grain is visible from day to day. The Fellahs
were at work on all sides, preparing for planting, and the ungainly
buffaloes drew their long ploughs slowly through the soil. Where
freshly turned, the earth had a rich, soft lustre, like dark-brown
velvet, beside which the fields of young wheat, beans and lentils,
glittered with the most brilliant green. The larks sang in the air and
flocks of white pigeons clustered like blossoms on the tops of the
sycamores. There, in November, it was the freshest and most
animating picture of Spring. The direct road to the Pyramids was
impassable, on account of the water, and we rode along the top of a
dyke, intersected by canals, to the edge of the Libyan Desert—a
distance of nearly ten miles. The ruptures in the dyke obliged us
occasionally to dismount, and at the last canal, which cuts off the
advancing sands from the bounteous plain on the other side, our
donkeys were made to swim, while we were carried across on the
shoulders of two naked Arabs. They had run out in advance to meet
us, hailing us with many English and French phrases, while half a
dozen boys, with earthen bottles which they had just filled from the
slimy canal, crowded after them, insisting, in very good English, that
we should drink at once, and take them with us to the Pyramids.
Our donkeys’ hoofs now sank deep in the Libyan sands, and we
looked up to the great stone-piles of Cheops, Cephrenes and
Mycerinus, not more than half a mile distant. Our sunrise view of the
Pyramids on leaving Gizeh, was sufficient, had I gone no further, and
I approached them, without the violent emotion which sentimental
travellers experience, but with a quiet feeling of the most perfect
satisfaction. The form of the pyramid is so simple and complete, that
nothing is left to the imagination. Those vast, yellowish-gray masses,
whose feet are wrapped in the silent sand, and whose tops lean
against the serene blue heaven, enter the mind and remain in the
memory with no shock of surprise, no stir of unexpected admiration.
The impression they give and leave, is calm, grand and enduring as
themselves.
The sun glared hot on the sand as we toiled up the ascent to the
base of Cheops, whose sharp corners were now broken into zigzags
by the layers of stone. As we dismounted in his shadow, at the foot
of the path which leads up to the entrance, on the northern side, a
dozen Arabs beset us. They belonged to the regular herd who have
the Pyramids in charge, and are so renowned for their impudence
that it is customary to employ the janissary of some Consulate in
Cairo, as a protection. Before leaving Gizeh I gave Achmet my
sabre, which I thought would be a sufficient show to secure us from
their importunities. However, when we had mounted to the entrance
and were preparing to climb to the summit, they demanded a dollar
from each for their company on the way. This was just four times the
usual fee, and we flatly refused the demand. My friend had in the
mean time become so giddy from the few steps he had mounted,
that he decided to return, and I ordered Achmet, who knew the way,
to go on with me and leave the Arabs to their howlings. Their leader
instantly sprang before him, and attempted to force him back. This
was too much for Achmet, who thrust the man aside, whereupon he
was instantly beset by three or four, and received several hard
blows. The struggle took place just on the verge of the stones, and
he was prudent enough to drag his assailants into the open space
before the entrance of the Pyramid. My friend sprang towards the
group with his cane, and I called to the donkey-driver to bring up my
sabre, but by this time Achmet had released himself, with the loss of
his turban.
The Arabs, who had threatened to treat us in the same manner,
then reduced their demand to the regular fee of five piastres for
each. I took three of them and commenced the ascent, leaving
Achmet and my friend below. Two boys followed us, with bottles of
water. At first, the way seemed hazardous, for the stones were
covered with sand and fragments which had fallen from above, but
after we had mounted twenty courses, the hard, smooth blocks of
granite formed broader and more secure steps. Two Arabs went
before, one holding each of my hands, while the third shoved me up
from the rear. The assistance thus rendered was not slight, for few of
the stones are less than four feet in height. The water-boys
scampered up beside us with the agility of cats. We stopped a
moment to take breath, at a sort of resting-place half-way up—an
opening in the Pyramid, communicating with the uppermost of the
interior chambers. I had no sooner sat down on the nearest stone,
than the Arabs stretched themselves at my feet and entertained me
with most absurd mixture of flattery and menace. One, patting the
calves of my legs, cried out; “Oh, what fine, strong legs! how fast
they came up: nobody ever went up the Pyramid so fast!” while the
others added: “Here you must give us backsheesh: every body gives
us a dollar here.” My only answer was, to get up and begin climbing,
and they did not cease pulling and pushing till they left me breathless
on the summit. The whole ascent did not occupy more than ten
minutes.
The view from Cheops has been often described. I cannot say that
it increased my impression of the majesty and grandeur of the
Pyramid, for that was already complete. My eyes wandered off from
the courses of granite, broadening away below my feet, to
contemplate the glorious green of the Nile-plain, barred with palm-
trees and divided by the gleaming flood of the ancient river; the
minarets of Cairo; the purple walls of the far Arabian mountains; the
Pyramid groups of Sakkara and Dashoor, overlooking disinterred
Memphis in the South; and the arid yellow waves of the Libyan
Desert, which rolled unbroken to the western sky. The clear, open
heaven above, which seemed to radiate light from its entire concave,
clasped in its embrace and harmonized the different features of this
wonderful landscape. There was too much warmth and brilliance for
desolation. Every thing was alive and real; the Pyramids were not
ruins, and the dead Pharaohs, the worshippers of Athor and Apis,
did not once enter my mind.
My wild attendants did not long allow me to enjoy the view quietly.
To escape from their importunities for backsheesh, I gave them two
piastres in copper coin, which instantly turned their flatteries into the
most bitter complaints. It was insulting to give so little, and they
preferred having none; if I would not give a dollar, I might take the
money back. I took it without more ado, and put it into my pocket.
This rather surprised them, and first one, and then another came to
me and begged to have it again, on his own private account. I threw
the coins high into the air, and as they clattered down on the stones,
there ensued such a scramble as would have sent any but Arabs
over the edge of the Pyramid. We then commenced the descent, two
seizing my hands as before, and dragging me headlong after them.
We went straight down the side, sliding and leaping from stone to
stone without stopping to take breath, and reached the base in five
or six minutes. I was so excited from the previous aggression of the
Arabs, that I neither felt fatigue nor giddiness on the way up and
down, and was not aware how violent had been my exertions. But
when I touched the level sand, all my strength vanished in an instant.
A black mist came over my eyes, and I sank down helpless and
nearly insensible. I was scarcely able to speak, and it was an hour
before I could sit upright on my donkey. I felt the Pyramid in all my
bones, and for two or three days afterwards moved my joints with as
much difficulty as a rheumatic patient.
The Arabs, who at first had threatened to kill Achmet, now came
forward and kissed his hands, humbly entreating pardon. But his
pride had been too severely touched by the blows he had received,
and he repulsed them, spitting upon the ground, as the strongest
mark of contempt. We considered it due to him, to ourselves, and to
other travellers after us, to represent the matter to the Shekh of the
Pyramids, who lives in a village called Kinnayseh, a mile distant, and
ordered Achmet to conduct us thither. We first rode along the base of
the Pyramid of Cephrenes, and down the sand drifts to the majestic
head of the Sphinx. I shall not attempt to describe this enormous
relic of Egyptian art. There is nothing like it in the world. Those
travellers who pronounce its features to be negro in their character,
are certainly very hasty in their conclusions. That it is an Egyptian
head is plainly evident, notwithstanding its mutilation. The type,
however, is rather fuller and broader than is usual in Egyptian
statues.
On reaching the village we found that the shekh was absent in
Cairo, but were received by his son, who, after spelling out a few
words of my Arabic passport and hearing Achmet’s relation of the
affair, courteously invited us to his house. We rode between the mud
huts to a small court-yard, where we dismounted. A carpet was
spread on the ground, under a canopy of palm-leaves, and the place
of honor was given to us, the young shekh seating himself on the
edge, while our donkey-drivers, water-boys and a number of
villagers, stood respectfully around. A messenger was instantly
despatched to the Pyramids, and in the mean time we lighted the
pipe of peace. The shekh promised to judge the guilty parties and
punish them in our presence. Coffee was ordered, but as the unlucky
youth returned and indiscreetly cried out, “Ma feesh!” (there is none!)
the shekh took him by the neck, and run him out of the court-yard,
threatening him with all manner of penalties unless he brought it.
We found ourselves considered in the light of judges, and I
thought involuntarily of the children playing Cadi, in the Arabian tale.
But to play our Cadi with the necessary gravity of countenance was
a difficult matter. It was rather embarrassing to sit cross-legged so
long, and to look so severe. My face was of the color of a boiled

Вам также может понравиться