DevOps with OpenShift 1st Edition Mike Hepburn

madumalitt 11 views 63 slides Mar 13, 2025
Slide 1
Slide 1 of 63
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51
Slide 52
52
Slide 53
53
Slide 54
54
Slide 55
55
Slide 56
56
Slide 57
57
Slide 58
58
Slide 59
59
Slide 60
60
Slide 61
61
Slide 62
62
Slide 63
63

About This Presentation

DevOps with OpenShift 1st Edition Mike Hepburn
DevOps with OpenShift 1st Edition Mike Hepburn
DevOps with OpenShift 1st Edition Mike Hepburn


Slide Content

Explore the full ebook collection and download it now at textbookfull.com
DevOps with OpenShift 1st Edition Mike Hepburn
https://textbookfull.com/product/devops-with-openshift-1st-
edition-mike-hepburn/
OR CLICK HERE
DOWLOAD EBOOK
Browse and Get More Ebook Downloads Instantly at https://textbookfull.com
Click here to visit textbookfull.com and download textbook now

Your digital treasures (PDF, ePub, MOBI) await
Download instantly and pick your perfect format...
Read anywhere, anytime, on any device!
DevOps with OpenShift Cloud Deployments Made Easy 1st
Edition Mike Hepburn
https://textbookfull.com/product/devops-with-openshift-cloud-
deployments-made-easy-1st-edition-mike-hepburn/
textbookfull.com
Cloud Native DevOps with Kubernetes 1st Edition John
Arundel
https://textbookfull.com/product/cloud-native-devops-with-
kubernetes-1st-edition-john-arundel/
textbookfull.com
DevOps for Digital Leaders Reignite Business with a Modern
DevOps Enabled Software Factory 1st Edition Aruna
Ravichandran
https://textbookfull.com/product/devops-for-digital-leaders-reignite-
business-with-a-modern-devops-enabled-software-factory-1st-edition-
aruna-ravichandran/
textbookfull.com
Implementing Devops with Microsoft Azure Mitesh Soni
https://textbookfull.com/product/implementing-devops-with-microsoft-
azure-mitesh-soni/
textbookfull.com

Domestic law in international investment arbitration 1st
Edition Hepburn
https://textbookfull.com/product/domestic-law-in-international-
investment-arbitration-1st-edition-hepburn/
textbookfull.com
Introduction to DevOps with Chocolate, LEGO and Scrum Game
1st Edition Dana Pylayeva (Auth.)
https://textbookfull.com/product/introduction-to-devops-with-
chocolate-lego-and-scrum-game-1st-edition-dana-pylayeva-auth/
textbookfull.com
Agile Project Management with Azure DevOps: Concepts,
Templates, and Metrics 1st Edition Joachim Rossberg
https://textbookfull.com/product/agile-project-management-with-azure-
devops-concepts-templates-and-metrics-1st-edition-joachim-rossberg/
textbookfull.com
DevOps for SharePoint: With Packer, Terraform, Ansible,
and Vagrant Oscar Medina
https://textbookfull.com/product/devops-for-sharepoint-with-packer-
terraform-ansible-and-vagrant-oscar-medina/
textbookfull.com
Red Hat and IT Security: With Red Hat Ansible, Red Hat
OpenShift, and Red Hat Security Auditing 1st Edition
Rithik Chatterjee
https://textbookfull.com/product/red-hat-and-it-security-with-red-hat-
ansible-red-hat-openshift-and-red-hat-security-auditing-1st-edition-
rithik-chatterjee/
textbookfull.com

Stefano Picozzi,
Mike Hepburn & Noel O'Connor
DevOps with 
OpenShift
CLOUD DEPLOYMENTS MADE EASY
C
o
m
p
l
i
m
e
n
t
s

o
f

Stefano Picozzi, Mike Hepburn, and Noel O’Connor
DevOps with OpenShift
Cloud Deployments Made Easy
BostonFarnhamSebastopolTokyoBeijingBostonFarnhamSebastopolTokyoBeijing

978-1-491-97662-3
[LSI]
DevOps with OpenShift
by Stefano Picozzi, Mike Hepburn, and Noel O’Connor
Copyright © 2017 Red Hat, Inc. All rights reserved.
Printed in the United States of America.
Published by O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472.
O’Reilly books may be purchased for educational, business, or sales promotional use. Online editions are
also available for most titles (http://oreilly.com/safari). For more information, contact our corporate/insti‐
tutional sales department: 800-998-9938 or [email protected].
Editors: Brian Anderson and Virginia Wilson
Production Editor: Nicholas Adams
Copyeditor: Jasmine Kwityn
Proofreader: Sonia Saruba
Indexer: Angela Howard
Interior Designer: David Futato
Cover Designer: Randy Comer
Illustrator: Rebecca Demarest
May 2017:
First Edition
Revision History for the First Edition
2017-04-10: First Release
See http://oreilly.com/catalog/errata.csp?isbn=9781491975961 for release details.
The O’Reilly logo is a registered trademark of O’Reilly Media, Inc. DevOps with OpenShi?, the cover
image, and related trade dress are trademarks of O’Reilly Media, Inc.
While the publisher and the authors have used good faith efforts to ensure that the information and
instructions contained in this work are accurate, the publisher and the authors disclaim all responsibility
for errors or omissions, including without limitation responsibility for damages resulting from the use of
or reliance on this work. Use of the information and instructions contained in this work is at your own
risk. If any code samples or other technology this work contains or describes is subject to open source
licenses or the intellectual property rights of others, it is your responsibility to ensure that your use
thereof complies with such licenses and/or rights.

Table of Contents
Preface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii
1.
Introduction to DevOps with OpenShift. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
DevOps 1
Containers 2
Container Orchestration 2
Continuous Integration 2
Continuous Delivery 3
Continuous Deployment 3
Pipelines 3
Software Configuration Management 4
Deployment Patterns 4
Continuous Improvement 5
Summary 5
2.
Installing the All-In-One OpenShift. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Software Requirements 7
Install OpenShift oc Client Tools 8
Install Docker 9
Launch OpenShift 10
Verify Your Environment 11
Log In Using the Command Line 11
Log In from Console 12
Working with Storage 14
Create a Persistent Volume 14
Set Up the Volume Claim 15
Create a GitHub Account 16
Alternative Form Factors 16
iii

Summary 16
3.
Deployments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
The Replication Controller 17
Deployment Strategies 18
Rolling 18
Triggers 19
Recreate 21
Custom 22
Lifecycle Hooks 22
Deployment Pod Resources 26
Blue-Green Deployments 27
A/B Deployments 28
Canary Deployments 31
Rollbacks 32
Summary 34
4.
Pipelines. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Our First Pipeline Example 35
Pipeline Components 38
So What’s Happened Here? Examination of the Pipeline Details 39
Explore Jenkins 41
Multiple Project Pipeline Example 43
Build, Tag, Promote 43
Create Projects 44
Add Role-Based Access Control 45
Deploy Jenkins and Our Pipeline Definition 45
Deploy Our Sample Application 46
Run Our Pipeline Deployment 48
Quickly Deploying a New Branch 50
Managing Image Changes 50
Cascading Pipelines 52
Customizing Jenkins 55
Parallel Build Jobs 57
Summary 58
5.
Con?guration Management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Secrets 59
Secret Creation 60
Using Secrets in Pods 60
Additional Information 63
Configuration Maps 64
iv | Table of Contents

Creating Configuration Maps 64
Mounting Configuration Maps as Volumes 64
Mounting the Configuration Map as Environment Variables 65
Environment Variables 67
Adding Environment Variables 67
Removing Environment Variables 67
Change Triggers 68
Labels and Annotations 70
Downward API 70
Handling Large Configuration Data Sets 73
Persistent Volumes 73
Layered Images 73
Summary 74
6.
Custom Image Builds. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
OpenShift Builds 75
Build Strategies 75
Build Sources 76
Build Configurations 76
Source to Image 79
S2I Process 80
Custom S2I Scripts 81
Custom S2I Builder 81
Builder Image 82
S2I Scripts 83
Adding a New Builder Image 84
Building a Sample Application 84
Troubleshooting 87
Summary 88
7.
Application Management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Integrated Logging 91
Container Logs Are Transient 92
Aggregated Logging 92
Kibana 94
Some General Aggregated Kibana Queries 95
Simple Metrics 97
Resource Scheduling 99
Quotas 101
Quota Scopes 103
Quota Enforcement 104
Limit Ranges and Requests Versus Limits 104
Table of Contents | v

Multiproject Quotas 106
Applications 107
Eviction and Pod Rescheduling 107
Overcommit 108
Auto Pod Scaling 108
Java-Based Application Monitoring and Management Using Jolokia 110
Summary 114
Afterword. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
A.OpenShift and 12 Factor Apps. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
vi | Table of Contents

Preface
If you’re old, don’t try to change yourself, change your environment.
—B. F. Skinner
One view of DevOps is that it helps take on that last mile problem in software: value
delivery. The premise is that encouraging behaviors such as teaming, feedback, and
experimentation will be reinforced by desirable outcomes such as better software,
delivered faster and at lower cost. For many, the DevOps discourse then quickly turns
to automation. That makes sense as automation is an environmental intervention that
is relatively actionable. If you want to change behavior, change the environment!
In this context, automation becomes a significant investment decision with strategic
import. DevOps automation engineers face a number of design choices. What level of
interface abstraction is appropriate for the automation tooling? Where should you
separate automation concerns of an infrastructure nature from those that should be
more application centric?
These questions matter because automation tooling that is accessible to all can better
connect all the participants in the software delivery process. That is going to help fos‐
ter all those positive teaming behaviors we are after. Automation that is decoupled
from infrastructure provisioning events makes it possible to quickly tenant new
project streams. Users can immediately self-serve without raising a new infrastruc‐
ture requisition.
We want to open the innovation process to all, be they 10x programmers or citizen
developers. Doing DevOps with OpenShift makes this possible, and this book will
show you how.
This is a practical guide that will show how to easily implement and automate power‐
ful cloud deployment patterns using OpenShift. The OpenShift container manage‐
ment platform provides a self-service platform for users. Its natively container-aware
approach will allow us to show you an application-centric view to automation.
vii

Who Should Read This Book
If you are keen to awaken your inner DevOps then this book is for you. It is intended
for programmers who want to learn how to use OpenShift to automate the software
delivery process to achieve continuous integration, delivery, and deployment.
Note that we deliberately take an application workload-centric view of the problem.
Concerns related to the overall management and operation of the OpenShift system
will be the subject of a forthcoming title in O’Reilly’s OpenShift series.
We will step you through how to develop container-based applications that can be
easily and safely changed via pipelines and powerful deployment patterns. Starting
with a few simple steps to launch OpenShift as an all-in-one image on your worksta‐
tion, we will cover examples for application environment configuration, persistent
volume claims, and A/B, blue-green, and rolling or replacement deployment strate‐
gies. Techniques for third-party tool chain integration using webhooks will be
explained and demonstrated.
This book builds on the material covered in OpenShi? for Developers and so assumes
some background knowledge of basic OpenShift development concepts such as:

Developing and deploying an application.

Using application templates.

Managing application workloads.

Working with Docker images.
As with the previous title, we also assume you are familiar with basic Linux or Win‐
dows shell commands, and how to install additional software on your computer. The
software you install will provide you with a complete working OpenShift environ‐
ment that you can use locally for development or testing.
We have used a PHP and a Node.js application for many of the examples in this book.
You do not need to be proficient in PHP or Node.js. If you are familiar with any of
the popular programming languages you will do just fine.
Why We Wrote This Book
As Red Hat consultants, we are often called upon to assist clients in the deployment
and widespread adoption of OpenShift as their container management platform.
They are drawn to OpenShift as a technology enabler for increased agility and
responsiveness. In this context, change-ability can be the most critical of nonfunc‐
tional requirements. Continuous improvement needs continuous user feedback. We
have found that the ability to push, test, and then roll forward or roll back small
application changes to live users can become critical to realizing such benefits. In this
viii | Preface

book we want to help you implement DevOps practices using OpenShift so that you
can quickly deliver quality applications that will make a difference for your users.
Online Resources
In this book you will install a self-contained OpenShift environment based on Open‐
Shift Origin. This is the upstream open source version of OpenShift on which Red
Hat’s OpenShift Container Platform, OpenShift Dedicated, and OpenShift Online
products are based.
Various options are available to stand up a self-contained environment. For this book,
we will focus on the oc cluster up technique that starts up a local all-in-one cluster
based on OpenShift Origin. Alternative approaches are available, such as the Vagrant
all-in-one virtual machine described at the OpenShift Origin site. This procedure was
covered in OpenShi? for Developers and so is not repeated in detail here.
OpenShift Origin will always include all the latest features, with support being pro‐
vided by the OpenShift community.
The OpenShift product releases are created as a regular snapshot of the OpenShift
Origin project. The product releases do not always have the very latest features, but if
you have a commercial Red Hat subscription, the product releases include support
from Red Hat.
If you would like to try out the OpenShift Container Platform version, a couple of
options are available.
The first is to register for a Red Hat Developers account. The Red Hat Developer Pro‐
gram allows you to access versions of Red Hat products for personal use on your own
computer. One of the products made available through the program is the Red Hat
Container Development Kit. This includes a version of OpenShift that you can install
on your own computer, but which is based on OpenShift Container Platform rather
than OpenShift Origin.
A second way of trying out OpenShift Container Platform is via the Amazon Web
Services (AWS) Test Drive program. This will set you up an OpenShift environment
running across a multinode cluster on AWS.
Take a look at more in-depth documentation on OpenShift and how to use it at the
OpenShift documentation site.
Check out the OpenShift blog, where regular articles are published on OpenShift.
If you want to hear about how others in the OpenShift community are using Open‐
Shift, or wish to share your own experiences, you can join the OpenShift Commons.
Preface | ix

If you have questions or issues, you can reach the OpenShift team through Stack
Overflow, on Twitter (@openshift), or in the #openshift channel on IRC’s FreeNode
network.
Conventions Used in This Book
The following typographical conventions are used in this book:
Italic
Indicates new terms, URLs, email addresses, filenames, and file extensions.
Constant width
Used for program listings, as well as within paragraphs to refer to program ele‐
ments such as variable or function names, databases, data types, environment
variables, statements, and keywords.
Constant width bold
Shows commands or other text that should be typed literally by the user.
Constant width italic
Shows text that should be replaced with user-supplied values or by values deter‐
mined by context.
This element signifies a tip or suggestion.
This element signifies a general note.
This element indicates a warning or caution.
Using Code Examples
Supplemental material (code examples, exercises, etc.) is available for download at
https://github.com/devops-with-openshi?.
x | Preface

This book is here to help you get your job done. In general, if example code is offered
with this book, you may use it in your programs and documentation. You do not
need to contact us for permission unless you’re reproducing a significant portion of
the code. For example, writing a program that uses several chunks of code from this
book does not require permission. Selling or distributing a CD-ROM of examples
from O’Reilly books does require permission. Answering a question by citing this
book and quoting example code does not require permission. Incorporating a signifi‐
cant amount of example code from this book into your product’s documentation does
require permission.
We appreciate, but do not require, attribution. An attribution usually includes the
title, author, publisher, and ISBN. For example: “DevOps with OpenShi? by Stefano
Picozzi, Mike Hepburn, and Noel O’Connor (O’Reilly). Copyright 2017 Red Hat, Inc.,
978-1-491-97662-3.”
If you feel your use of code examples falls outside fair use or the permission given
above, feel free to contact us at [email protected].
O’Reilly Safari
Safari (formerly Safari Books Online) is a membership-based
training and reference platform for enterprise, government,
educators, and individuals.
Members have access to thousands of books, training videos, Learning Paths, interac‐
tive tutorials, and curated playlists from over 250 publishers, including O’Reilly
Media, Harvard Business Review, Prentice Hall Professional, Addison-Wesley Profes‐
sional, Microsoft Press, Sams, Que, Peachpit Press, Adobe, Focal Press, Cisco Press,
John Wiley & Sons, Syngress, Morgan Kaufmann, IBM Redbooks, Packt, Adobe
Press, FT Press, Apress, Manning, New Riders, McGraw-Hill, Jones & Bartlett, and
Course Technology, among others.
For more information, please visit http://oreilly.com/safari.
How to Contact Us
Please address comments and questions concerning this book to the publisher:
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
800-998-9938 (in the United States or Canada)
707-829-0515 (international or local)
Preface | xi

707-829-0104 (fax)
To comment or ask technical questions about this book, send email to bookques‐
[email protected].
For more information about our books, courses, conferences, and news, see our web‐
site at http://www.oreilly.com.
Find us on Facebook: http://facebook.com/oreilly
Follow us on Twitter: http://twitter.com/oreillymedia
Watch us on YouTube: http://www.youtube.com/oreillymedia
Acknowledgments
Stefano
It’s a privilege to contribute to a book such as this. For this, I am grateful to my family
and Red Hat for allowing me to indulge in those private, quiet moments it takes to
then get it done!
I also appreciate the many clients who have taken the time to share their aspirations
and challenges with me. Software process improvement is hard. All the insights and
suggestions presented here originate there.
Mike
One of my favorite quotes related to content creation is this one from Harry S. Tru‐
man: “It is amazing what you can accomplish if you do not care who gets the credit.”
It is with this humility that I wish to acknowledge all of the fantastic work from the
OpenShift community that has provided ideas that have gone into this book.
You Rock.
Noel
Writing this book has been a whole heap of fun and I’m grateful to Stefano and Mike
for inviting me to participate in this project. I’d also like to thank my wife and chil‐
dren for their patience and support while writing this book.
The true power of this platform is in its open source foundations and the multitude
of perspectives and opinions that only a diverse open community can bring. Thanks
also to all those involved in the internal Red Hat teams who develop, productize, test,
document, and support this platform.
xii | Preface

CHAPTER 1
Introduction to DevOps with OpenShift
This book provides a practical guide for using OpenShift as an enablement technol‐
ogy for DevOps. OpenShift’s combination of container management platform with
natively container-aware automation can bring those Developer and Operations con‐
stituencies together in ways not previously possible. This enables software work
products to present themselves in a standardized form to your preferred continuous
integration and delivery tool chains.
Container awareness makes it possible to leverage deployment strategies and quality
of service characteristics honored by the container management platform and under‐
lying orchestration engine. We can start thinking in terms of containers-as-code rather
than infrastructure-as-code.
So to get started, let’s review some key DevOps concepts as interpreted with a
container-centric viewpoint.
DevOps
DevOps is concerned with aligning the constituents in the software delivery process
to a common goal of value delivery—and it’s not just Developers and Operators, but
InfoSec and Quality Assurance functions and more. Recognize that wealth is created
when the work product is valued by actors external to the production system. Value
delivery outcomes are measured by metrics tied to production delivery velocity, qual‐
ity, and waste. DevOps emphasizes behavioral- or cultural-related changes such as
those which encourage teaming, inclusion, feedback, and experimentation. Techno‐
logical interventions such as automation are central as they can reinforce such target
behaviors. DevOps does not necessarily imply functional roles in software delivery
such as development, quality assurance, or operations are merged or seconded. More
1

important is that a professional respect and shared sensibility is formed across the
delivery team.
Containers
Containers are the runtime representation of a packaging format based on a light‐
weight, immutable image. Runtime dependencies are resolved within the image
which facilitates portability. This makes possible the agreement on a standardized
software work product. Management and runtime tooling that is container aware can
then be applied consistently no matter what the underlying technology stack.
Container-based workloads are suitable for multi-tenancy on a single compute
instance and when implemented securely can realize significant operation efficien‐
cies. An important corollary is that launching a new workload does not incur the cost
of provisioning new compute infrastructure. This enables a true on-demand, self-
service experience for users.
Container Orchestration
Container orchestration involves the lifecycle management of container workloads,
including functions such as to schedule, stop, start, and replicate across a cluster of
machines. Compute resources for running workloads are abstracted, allowing the
host infrastructure to be treated as a single logical deployment target. Kubernetes is
an open source community project addressing container orchestration. It groups
containers that make up an application into logical units for easy management and
discovery, and features self-healing, service discovery, load balancing, and storage
services among its rich feature set. Orchestration plays a critical role in our design
goal of application-centricity as quality of service attributes and deployment patterns
are executed by invoking Kubernetes API primitives.
Continuous Integration
Continuous integration (CI) concerns the integration of code from potentially multi‐
ple authors into a shared source code management (SCM) repository. Such check-ins
could occur many times a day, and automation steps in such a process could include
gates or controls to expose any issues as early as possible. SCMs such as Git
include workflow support to commit to trunk, push, and merge code pull requests
from multiple developers. With containers, a Git push event could be configured to
then trigger an image build event via the webhooks mechanism.
2 | Chapter 1: Introduction to DevOps with OpenShift

Continuous Delivery
Once a CI strategy is in place, consideration can then move to achieving continuous
delivery (CD). This involves automating the steps required to promote the work
product from one environment to the next within the defined software development
lifecycle (SDLC). Such steps could include automated testing, smoke, unit, functional,
and static code analysis and static dependency checks for known security vulnerabili‐
ties. With containers, promotion in later stages of the SLC may merely involve the
tagging of the (immutable) image to mark acceptance. Binary promotions are also
possible such that only the image is pushed (to the target registry of the new environ‐
ment), leaving source code in situ.
Continuous Deployment
By convention, we can denote the special case of automated continuous delivery to
production as continuous deployment (CD). We make such a distinction because such
deployments may be subject to additional governance processes and gates—for exam‐
ple, deliberate human intervention to manage risk and complete sign-off procedures.
We make such a distinction because such deployments may be subject to additional
governance processes. As per Figure 1-1, there may be scenarios for deliberate human
intervention to manage risk and complete sign-off procedures.
Figure 1-1. Continuous delivery versus deployment
Pipelines
Pipelines are a representation of the flow/automation in a CI/CD process. Typically a
pipeline might call out discrete steps in the software delivery process and present
them visually or via a high-level scripting language so the flow can be manipulated.
Continuous Delivery | 3

The steps might include build, unit tests, acceptance tests, packaging, documentation,
reporting, and deployment and verification phases. Well-designed pipelines help
deliver better quality code faster by enabling participants in the software delivery
process to more easily diagnose and respond to feedback. As illustrated in Figure 1-2,
diagnosis and response turnaround can be accelerated by organizing releases into
smaller and more frequent release bundles.
Figure 1-2. Smaller releases, release o?en, faster feedback
Software Con?guration Management
For our purposes we will take a narrower view of software configuration management
(CM) and focus on the recommended software engineering practice of separating
dynamic configuration from static runtime software. Doing so allows developers and
operations engineers to change the configuration without having to rebuild the run‐
time such as might occur when deploying to different environments. Containers,
based as they are on immutable images, amplify this behavior as the alternative would
be configuration layered across multiple images for each deployment scenario.
Deployment Patterns
Aligned with the goal of automation across all steps in the software delivery lifecycle
are patterns for deployment. We look here for strategies that can balance across crite‐
ria including safety, testability, reversibility, and downtime minimization in cloud-
scale scenarios. Some deployment patterns also offer opportunities for capturing and
4 | Chapter 1: Introduction to DevOps with OpenShift

responding to feedback. An A/B deployment allows for testing a user-defined
hypothesis such as whether application version A is more effective than B. Usage
results can then drive weighted load balancing across the alternatives. Automation of
deployment strategies in this DevOps world are implemented by driving the orches‐
tration APIs.
Continuous Improvement
Let’s conclude this chapter by covering continuous improvement (Figure 1-3), which
should be the thread that connects all of the process improvement–related practices
summarized. The environment changes and so must we. These practices make it easy
and inexpensive to experiment, formulate, and test hypotheses, as well as capture, act
on, and experiment with the feedback received. This way we can continue to inject
energy into the system and so maintain a state of dynamic stability—a balance of
adaptive/agile versus fixed/stable.
Figure 1-3. Continuous improvement
Summary
We covered here some of what is unique and nuanced about DevOps with OpenShift
and why it matters. Realizing these DevOps concepts using natively container-aware
automation can bring cloud deployment power to all the people, from 10x program‐
mer to citizen developer. The following chapters will show you how.
Continuous Improvement | 5

CHAPTER 2
Installing the All-In-One OpenShift
The same OpenShift codebase can take on many form factors. It can be a large public
cloud deployment, offered as a managed service, a private instance in your company’s
data center, or as small as a local installation on your own workstation. This makes
for a very convenient platform for evaluating, learning, and testing OpenShift-based
workloads. Skills developed on a local instance are transferable to more complex dis‐
tributed topologies.
The easiest way to get started is to visit the OpenShift website and register for a free
developer account. This will suffice for many of the examples covered in this book.
Once registered, you can log in and you are good to go!
Another option is to use a local OpenShift all-in-one cluster on your own worksta‐
tion. This is a fully functioning OpenShift instance with an integrated Docker regis‐
try, OpenShift master, and node. It can support both the upstream OpenShift Origin
and OpenShift Container Platform versions. The aim of this feature is to allow web
developers and other interested parties to run OpenShift V3 on their own computer.
The cluster will be routable from your local system so you can treat it like a hosted
version of OpenShift and can view the URLs you create.
As your own private instance, you can create as many projects as you like, push and
pull to your registry, create local persistent volumes, and have cluster admin access.
Here we will document building this using the oc cluster up command.
Software Requirements
The oc cluster up command starts a local OpenShift all-in-one cluster with a con‐
figured registry, router, image streams, and default templates. By default, the com‐
mand requires a working Docker connection. However, if running in an environment
with Docker Machine installed, it can create a Docker machine for you.
7

The oc cluster up command will create a default user and project, and once it com‐
pletes will allow you to start using the command line to create and deploy apps with
commands like oc new-app, oc new-build, and oc run. It will also print out a URL
to access the management console for your cluster.
So let’s get started. We are going to install the latest OpenShift client tools, install
Docker, and then start a local cluster instance.
The all-in-one cluster uses xip.io to provide DNS resolution with
application URLs. The advantage of this is that you actually get
routable URLs to your local machine without browser or separate
DNS configuration steps. The drawback is that you need to be
online whenever you use the cluster and xip.io may be blocked by
your company’s firewalls. Verify xip.io accessibility using a com‐
mand such as nslookup and check that it can return an address in
the non-authoritative answer section:
$ nslookup x.127.0.0.1.xip.io
Server: 61.9.195.193
Address: 61.9.195.193#53
Non-authoritative answer:
Name: x.127.0.0.1.xip.io
Address: 127.0.0.1
Install OpenShift oc Client Tools
OpenShift 3 allows you to work using a command-line interface (CLI), web console,
or via the Eclipse IDE using the latest JBoss tools. The CLI tool is known as oc and is
what we will use in most cases. It’s a single Go executable, so installation is simply a
matter of downloading the tool and adding it to your PATH. Choose the latest, stable
release from https://github.com/openshi?/origin/releases, select the download that
matches your operating system environment, update your PATH, and you are good to
go.
For example, if I extracted the contents to the CLI directory in my home directory, I
would issue the following command in both Linux and macOS to update the PATH
and then verify success:
$ export PATH=$PATH:~/cli/
$ oc version
oc v1.4.1+3f9807a
kubernetes v1.4.0+776c994
features: Basic-Auth
Server https://127.0.0.1:8443
8 | Chapter 2: Installing the All-In-One OpenShift

openshift v1.4.0-rc1+b4e0954
kubernetes v1.4.0+776c994
What version of OpenShift is that? The output from the oc
version command indicates that we have downloaded v1.4.1 of the
OpenShift Origin client tools. This means that when we come to
launch our local instance using oc cluster up, v1.4.1 of Open‐
Shift Origin distribution will be pulled down.
For Windows users, the specific details for updating your PATH varies slightly
between releases. Using Windows 10, right-click the bottom lefthand corner to raise
the Power User task menu, then click System, Advanced System Settings, and finally,
select Environment Variables. Once the dialog opens, select the Path variable and add
“;C:\CLI” at the end (ensure you replace “C:\CLI” with the location of where you
extracted the tool). You could also just copy it to C:\Windows or a directory you
know is already on your path.
Install Docker
The oc cluster up command looks for a working Docker connection. The installa‐
tion and configuration instructions for Linux, macOS, and Windows environments
are covered in the documentation website for Local Cluster Management. Refer to the
website for configuration instructions for your environment, but take note of the
requirement to configure for an insecure registry parameter of 172.30.0.0/16 in each
case. If using Docker for Mac or Docker for Windows, you configure this setting
from the Preferences GUI. Once installed, verify Docker is functioning before pro‐
ceeding. For this book, Docker version 1.13.0 was used. Note that if you will be
attempting more memory-intensive use cases, increase the assigned memory for
Docker:
$ docker version
Client:
Version: 1.13.0
API version: 1.25
...
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
78445dd45222: Pull complete
Digest: sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
Software Requirements | 9

Docker for Windows is available for Windows 10 and Windows
Server 2016. If you are running earlier versions, then go for the
Vagrant self-contained OpenShift.
Launch OpenShift
With Docker and the oc tools installed and verified, we are ready to launch Open‐
Shift! The oc cluster command accepts various switches, but two we will take spe‐
cial note of are the host-data-dir and host-config-dir parameters. These allow
you to specify a location for storing OpenShift cluster system state. Doing so enables
you to set up named “profiles” for separate cluster instances within the same worksta‐
tion that you can return to later. For the first invocation do something like below,
replacing $HOME to reflect your environment and $PROFILE to, for example, “DevOps‐
WithOpenShift”. This first attempt may take a few minutes as it downloads the Open‐
Shift distribution. Make note of the URL for the server as we will be referring to that
later.
$ oc cluster up \
--host-data-dir='$HOME/oc/profiles/$PROFILE/data' \
--host-config-dir='$HOME/oc/profiles/$PROFILE/config'
-- Checking OpenShift client ... OK
-- Checking Docker client ... OK
-- Checking Docker version ... OK
-- Checking for existing OpenShift container ... OK
-- Checking for openshift/origin:v1.4.1 image ...
Pulling image openshift/origin:v1.4.1
Pulled 1/3 layers, 41% complete
Pulled 2/3 layers, 76% complete
Pulled 3/3 layers, 100% complete
Extracting
Image pull complete
...
-- Server Information ...
OpenShift server started.
The server is accessible via web console at:
https://192.168.99.100:8443
You are logged in as:
User: developer
Password: developer
To login as administrator:
oc login -u system:admin
The profile feature described is available when using a native Docker service (e.g.,
Docker for Mac or Docker for Windows). Environments using Docker Toolbox
10 | Chapter 2: Installing the All-In-One OpenShift

would pass the --create-machine switch instead at first-time launch in order to cre‐
ate a Docker virtual machine driver.
By default, oc cluster up will pull down from the upstream
OpenShift Origin repository, v1.4.1 in this case. To point to a spe‐
cific enterprise image, and version, add the --image and --version
switches to the cluster up invocation. For example, adding
--image=registry.access.redhat.com/openshift3/ose and
--version=v3.4 will launch using OpenShift Container Platform
V3.4.
Windows users can launch the equivalent instruction on Power‐
Shell, albeit using the ^ character for command-line continuation.
Linux and macOS users can also consider passing an additional
parameter --public-hostname=127.0.0.1 to ensure an OpenShift
server on 127.0.0.1:8443.
Now let’s restart the OpenShift cluster using the use-existing-config parameter
and point to the saved named profile:
$ oc cluster down
$ oc cluster up \
--host-data-dir='$HOME/oc/profiles/$PROFILE/data' \
--host-config-dir='$HOME/oc/profiles/$PROFILE/config' \
--use-existing-config
...
The oc cluster command supports many switches. There are var‐
ious open source projects that have built convenience wrappers and
tools to simplfy usage. Some of these include Minishift and oc-
cluster-wrapper.
Verify Your Environment
Let’s now check that we are good to go by logging in using the CLI. We will then ver‐
ify our installation by creating an application.
Log In Using the Command Line
$ oc login -u developer -p developer
Login successful.
You have one project on this server: "myproject"
Verify Your Environment | 11

Using project "myproject".
$ oc project myproject
Already on project "myproject" on server "https://127.0.0.1:8443".
$ oc new-app --name='cotd' --labels name='cotd' php~https://github.com/devops-
with-openshift/cotd.git -e SELECTOR=cats
--> Found image 1875070 (10 days old) in image stream "openshift/php" under tag
"5.6" for "php"
Apache 2.4 with PHP 5.6
-----------------------
Platform for building and running PHP 5.6 applications
Tags: builder, php, php56, rh-php56
* A source build using source code from https://github.com/devops-with-
openshift/cotd.git will be created
* The resulting image will be pushed to image stream "cotd:latest"
* Use 'start-build' to trigger a new build
* This image will be deployed in deployment config "cotd"
* Port 8080/tcp will be load balanced by service "cotd"
* Other containers can access this service through the hostname "cotd"
--> Creating resources with label name=cotd ...
imagestream "cotd" created
buildconfig "cotd" created
deploymentconfig "cotd" created
service "cotd" created
--> Success
Build scheduled, use 'oc logs -f bc/cotd' to track its progress.
Run 'oc status' to view your app.
$ oc expose service cotd
route "cotd" exposed
Windows users with Docker for Windows installed should invoke
the cluster up and cluster down command from PowerShell.
Some of the labs to follow may describe Linux/Bash-style
command-line operations. Windows users can reproduce such
instructions using Bash for Windows or an equivalent.
Log In from Console
The console can be accessed using the OpenShift server console URL as displayed
during the launch output (https://127.0.0.1:8443/console/). Log in using “developer” as
the username and “developer” as the password. Then visit “My Project” to check the
application you just created using the CLI (Figure 2-1).
12 | Chapter 2: Installing the All-In-One OpenShift

Figure 2-1. My project with COTD application
Click the route link as displayed in your console—for example, http://cotd-myproject.
127.0.0.1.xip.io. If all is functioning correctly you should see something like
Figure 2-2.
While you are test-driving your brand-new, all-in-one cluster, why
not check out the profile feature? Just shut down your running
cluster and restart using a different profile name. Then toggle
between the different profiles to verify system state is preserved
within each profile, and restart. System configuration for each pro‐
file will be located as specified in your --host-data-dir and
--host-config-dir launch runtime switches.
Verify Your Environment | 13

Figure 2-2. Cats!
Working with Storage
For some of the labs to follow you may wish to attach storage to your container run‐
ning in your local cluster instance. The approach described is valid for a cluster
instance launched using a native Docker service (i.e., not using the --create-
machine switch). To do so using the oc CLI, follow these steps:
1.
Create a persistent volume (pv).
2.
Set up the volume claim and assign to a deploymentConfig.
Create a Persistent Volume
To create a persistent volume (pv), you need to log in as the cluster admin user and
issue the following instruction, replacing $VOLUMENAME, $VOLUMESIZE, and $VOLUME
PATH to reflect your environment—for example, sample settings could be myvolume,
1Gi, and /tmp/myvolume (a complete review of available configuration options can be
found in the documentation):
14 | Chapter 2: Installing the All-In-One OpenShift

$ oc login -u system:admin
$ oc create -f - << EOF!
apiVersion: v1
kind: PersistentVolume
metadata:
name: $VOLUMENAME
spec:
capacity:
storage: $VOLUMESIZE
accessModes:
- ReadWriteOnce
- ReadWriteMany
persistentVolumeReclaimPolicy: Recycle
hostPath:
path: $VOLUMEPATH
EOF!
persistentvolume "myvolume" created
The host path ($VOLUMEPATH) needs to be shared to Docker and
expressed using a POSIX-style path convention. If using Docker for
Mac or Docker for Windows, visit the Docker Preferences to
update the sharing settings. In Windows, $VOLUMEPATH would take
the form C/path/to/directory.
You may be wondering what those “access modes” are. The Kuber‐
netes documentation summarizes this as RWO (ReadWriteOnce),
the volume can be mounted as read-write by a single node; ROX
(ReadOnlyMany), the volume can be mounted read-only by many
nodes; and RWX (ReadWriteMany), the volume can be mounted as
read-write by many nodes.
Set Up the Volume Claim
You can create a persistent volume claim (PVC) and assign it to a deploymentConfig
in a single operation using the oc volume. Assuming you have created an application
called “cotd” inside project “myproject”, then you would issue an instruction similar
to below. Replace $VOLUMECLAIMNAME, $VOLUMECLAIMSIZE, $MOUNTPATH, and $VOLUME
NAME to reflect your environment. Sample settings could be myvolumeclaim, 100Mi,
and /opt/app-root/src/data. Note that in this instance, the $MOUNTPATH denotes the
path inside your container:
$ oc login -u developer -p developer
$ oc project myproject
$ oc volume dc/cotd --add \
--name=images
Working with Storage | 15

Another Random Document on
Scribd Without Any Related Topics

mahdolliseksi, hänen päätöksensä oli peruuttamaton, vaikka hän
vienosti väristen yhä edelleenkin sanoi "ei", koska hänellä ei ollut
rohkeutta tunnustaa väkivaltaisuuttansa.
Jacques, joka seisoi ruokakaappiin nojautuneena, tavoitteli
edelleen hymyilyä. Hän huomasi veitsen, joka oli siellä.
— Sinun pitänee antaa minulle veitsi, jos tahdot, että otan hänet
hengiltä… Onhan minulla jo kello, niin että saan pienen museon.
Hän nauraa hohotti, mutta Séverine vastasi vakavasti:
— Ota veitsi.
Ja sitten kun Jacques oli pistänyt sen taskuunsa, ikäänkuin
ajaakseen pilan päähän saakka, suuteli hän häntä.
— Hyvää yötä nyt. Minä etsin heti ystäväni ja pyydän häntä
odottamaan… Ellei lauvantaina sada, niin etsi minut Sauvagnatin
talon takaa. Siitä on sovittu vai kuinka?… Ja ole tyyni, me emme ota
ketään hengiltä, me vain laskemme leikkiä.
Vaikka oli myöhäinen, meni Jacques nyt alas satamaan etsimään
hotellista toveria, jonka oli määrä matkustaa pois seuraavana
päivänä. Hän puhui hänelle toiveista mahdollisesti saada periä ja
pyysi neljäntoista päivän lykkäytystä, ennen kun antaisi hänelle
varman vastauksen. Kulkiessaan suuria, mustia lehtokujia pitkin
takaisin asemalle, ajatteli hän, mitä oli tehnyt ja ihmetteli sitä. Oliko
hän siis päättänyt surmata Roubaudin, koska hänellä jo oli
hallussaan hänen vaimonsa ja rahansa? Ei, hän ei suinkaan ollut
päättänyt mitään, ja hän kyllä myös ryhtyisi varokeinoihin siinä
tapauksessa, että tekisi sellaisen päätöksen. Mutta nyt astui esiin

muisto Séverinestä ja hänen kuumasta kädenpuristuksestaan ja
hänen lujasta katseestaan, joka sanoi "kyllä", hänen suunsa
sanoessa "ei". Ilmeisesti tahtoi hän, että Jacques ottaisi Roubaudin
hengiltä. Hän kävi sangen levottomaksi. Mitä pitäisi hänen tekemän?
Palattuaan Rue François-Mazelinelle ja laskeuduttuaan levolle
kuorsaavan Pecqueuxin läheisyyteen, ei Jacques voinut nukkua.
Vastoin hänen tahtoaan työskentelivät hänen aivonsa tässä murha-
ajatuksessa, suunnittelemassa murhanäytelmää, jota hän mietti ja
harkitsi sen etäisimpiin seurauksiin saakka. Hän etsi ja punnitsi syitä
myöten ja vastaan. Kun hän mietiskeli kylmästi ja ilman kuumetta,
puhuivat kaikki syyt myöten. Eikö Roubaud ollut ainoa este heidän
onnellensa? Jos hän olisi kuollut, voisi hän naida Séverinen, eikä hän
salannut itseltänsä jumaloivansa häntä. Silloin omistaisi hän hänet
kokonaan ja ainiaaksi. Olisihan siinä sitäpaitsi rahoja, koko omaisuus.
Hän luopuisi rasittavasta ammatistaan ja tulisi vuorostaan omaksi
herrakseen tuossa Amerikassa, josta hän oli kuullut toveriensa
puhuvan maana, missä mekanikot kokoilivat kultaa lapioilla.
Ikäänkuin unessa esiintyi hänelle nyt kuva hänen uudesta
elämästään tuolla kaukana: vaimo, jota hän intohimoisesti rakasti,
nopeasti kootut miljoonat, rento elämä, rajaton kunnianhimo, kaikki
mitä hän tahtoi. Ja tämän unelman toteuttamiseksi oli tarpeen
ainoastaan yksi liike, ainoastaan erään ihmisen toimittaminen pois
tieltä, niinkuin poljetaan alas eläin, kasvi, joka kävellessä on haitaksi.
Hän ei enään ollut edes miellyttävä, tuo mies, joka nyt oli lihava ja
raskas ja kokonaan hupeni tyhmään pelihimoonsa, joka hävitti hänen
kaiken entisen tarmokkuutensa. Minkä vuoksi häntä säästettäisiin? Ei
kerrassaan mikään puhunut hänen eduksensa. Kaikki tuomitsi hänet,
koska vastaukseksi joka kysymykseen tuli, että toisten etu vaati
hänen kuolemataan. Epäröiminen olisi hassua ja pelkurimaista.

Mutta Jacques, jonka selkää poltti, ja joka oli laskeutunut
vatsallensa, kääntyi ympäri ja hypähti ylös. Eräs ajatus, joka tähän
saakka oli väikkynyt hänen mielessään varsin epämääräisenä, kiusasi
häntä nyt niin ankarasti, että tuntui siltä, kuin olisi jokin terävä esine
porattu hänen aivoihinsa. Hän, joka lapsuudesta asti oli halunnut
tappaa jonkun, ja jota kauhistus tämän päähänpiston johdosta oli
kiduttanut, miksi ei hän siis surmaisi Roubaudia? Kentiesi voisi hän,
valitsemalla tämän uhrin, ainiaaksi tyydyttää murhaamishimonsa, ja
sillä tapaa hän ei ainoastaan tekisi hyvää kauppaa, vaan myös
sitäpaitsi parantuisi. Parantuisi, herra Jumala! Ei enään tuntisi noita
verenjanoisia pöyristyksiä, voisi omistaa Séverinen, ilman että vanha
hurjuus hänessä heräisi. Kylmä hiki tihkui esiin, hän näki seisovansa
veitsi kädessään ja työntävän sen Roubaudin kaulaan, kuten tämä oli
tehnyt presidentille, ja tuntevansa tyydytystä ja kylläisyyttä sitä
mukaa kuin veri poreilisi hänen käsiensä lomitse. Hän tappaisi hänet,
se oli hänen päätöksensä, koska siinä olisi hänen pelastuksensa ja
jumaloidun vaimon ja omaisuuden saanti. Jos hänen pitäisi tappaa
joku, niin olisi se tämä joka hänen pitäisi surmata, hän tietäisi
ainakin silloin, mitä hän tekisi ja siinä olisi järkeä ja logiikkaa ja
hyötyä.
Kun Jacques oli tehnyt tämän päätöksen, oli kello juuri lyönyt
kolme ja hän koetti nukkua. Hän oli jo vaipunut tajuttomuuteen, kun
hän syvästi liikutettuna nousi pystyyn vuoteessa. Herra Jumala, oliko
hänellä sitten oikeus ottaa tämä mies hengiltä? Kun häntä vaivasi
kärpänen, löi hän sen kuoliaaksi, ja kerran kun kissa oli sotkeutunut
hänen jalkoihinsa, oli hän, tosin tahtomattaan, potkulla murskannut
sen jäsenet. Mutta tämä ihminen, hänen kaltaisensa! Hänen täytyi
uudistaa koko tuumailunsa todistaakseen oikeutensa tuon murhan
tekemiseen, sen oikeuden, mikä on väkevämmillä, joita heikommat
vaivaavat ja jotka sen vuoksi hävittävät ne. Nyt rakasti häntä toisen

vaimo, ja tämä itse tahtoi päästä vapaaksi voidakseen tulla naimisiin
hänen kanssaan ja antaa hänelle omaisuutensa. Hän ainoastaan
laittaisi esteen aivan yksinkertaisesti pois tieltään. Jos kaksi sutta
kohtaa toisensa metsässä ja naarassusi on läsnä, eikö voimakkaampi
susi silloin vapauta itseään tuosta toisesta? Ja eikö alkuaikoina,
jolloin ihmiset susien tavoin turvautuivat luoliin, himoittu nainen
kuulunut joukosta sille, joka kykeni voittamaan hänet itselleen
kilpakosijainsa veressä? Koska se oli elämän laki, oli sitä kaiketi
noudatettava, välittämättä yhteiselämän vuoksi myöhemmin
keksityistä verukkeista.
Vähitellen näytti hänestä hänen oikeutensa ehdottomalta, hän
tunsi koko päättäväisyytensä palaavan, jo seuraavana päivänä hän
valitsisi ajan ja paikan ja valmistelisi toimeenpanoa. Epäilemättä olisi
paras pistää Roubaud kuoliaaksi hänen yöllä kierrellessään asema-
alueella, jotta ihmiset voisivat luulla maankiertäjien hänet
murhanneen. Hän tiesi hyvän paikan hiilikasojen takana. Kunpa voisi
houkutella hänet sinne! Vaikka hän koetti nukkua, järjesti hän nyt
koko murhakohtauksen, pohti, mihin asettuisi ja kuinka iskisi,
kaataakseen hänet kuoliaana maahan.
Mutta hänen syventyessään pienimpiin erikoisseikkoihin, palasi
hiljaa ja vastustamattomana hänen vastenmielisyytensä. Hänessä oli
jotakin, mikä pani sitä vastaan ja sai hänen verensä kuohuksiin. Ei,
ei, hän ei iskisi. Se tuntui hänestä nyt niin vastenmieliseltä, niin
toimeensaamattomalta, niin mahdottomalta. Hänessä nousi sitä
vastaan sivistysihminen, hänen saamansa kasvatus, se, minkä perityt
mielipiteet hiljaa ja hävittämättömästi olivat rakentaneet. Hän oli
äidinmaidon mukana imenyt menneiltä sukupolvilta, ett'ei saa
tappaa! hänen hienostuneet aivonsa olivat täynnä epäilyksiä ja
inhoten hylkäsivät murha-ajatuksen, heti kun ne alkoivat sitä harkita.

Niin, toinen asia olisi tappaa, jos siihen kannustaisi himo,
kuohahtava intohimo! Mutta tappaa tarkoituksella, harkiten ja
itsekkäisyydestä, ei, sitä ei hän milloinkaan voisi!
Päivä alkoi sarastaa, kun Jacquesin onnistui hiukan nukahtaa,
mutta uni oli niin kevyt, että hänessä tapahtui sotkuinen väittely
tuosta inhoittavasta kysymyksestä. Seuraavista päivistä tuli
tuskallisimmat hänen elämässään. Hän karttoi Séverineä, ja peljäten
hänen silmiään, lähetti hän hänelle terveisiä, ett'ei hän voisi tulla
tapaamaan lauvantaina.
Mutta maanantaina ei hän voinut päästä häntä jälleen
kohtaamasta, ja kuten hän oli peljännyt, täyttivät hänen suuret
sinisilmänsä, nuo niin lempeät, niin suloiset, hänet tuskalla. Séverine
ei puhunut siitä, ei eleellä, ei sanallakaan kehoittanut häntä.
Mutta silmät olivat täynnä tätä asiaa, ne kysyivät häneltä, ne
rukoilivat sitä. Hän ei tietänyt, miten pääsisi siitä kärsimättömyydestä
ja nuhteesta, minkä hän luki niistä; hän näki ne alati kiinnitettynä
häneen ihmetyksen ilmein siitä, että hän saattoi epäröidä olla
onnellinen. Lähtiessään hänen luotaan, sulki Jacques hänet kiivaasti
syliinsä saadakseen hänet ymmärtämään, että hän oli tehnyt
päätöksensä. Hän oli sen todellakin tehnyt ja pysyi siinä aina
rappusten alapäähän saakka, mutta sitten hänen omatuntonsa
epäilykset palasivat. Kun hän näki hänet jälleen kaksi päivää
myöhemmin, oli hänellä samallainen outo kalpeus ja arka katse, kuin
pelkurilla, joka peräytyy välttämättömästä teosta. Séverine puhkesi
nyyhkytyksiin sanomatta mitään ja itki hänen kaulassaan riippuen,
hirveän onnettomana, ja Jacques joutui suunniltaan ja hänet täytti
sellainen itsensä halveksuminen, että hän olisi voinut kuolla.
— Etkö tahdo torstaina tulla? kysyi Séverine matalalla äänellä.

— Kyllä, torstaina odotan sinua.
Torstaina oli yö sangen pimeä, tähtiä ei loistanut
läpikuultamattoman synkällä taivaalla, joka oli täynnä merestä
noussutta usvaa. Tavallisuuden mukaan tuli Jacques ensiksi ja
oukaili, seisoen Sauvagnatin talon takana, Séverinen tuloa. Mutta
pimeys oli niin synkkä ja Séverine juoksi niin kevyesti, että Jacques
vapisi hipaistessaan häneen, ilman että oli sitä ennen häntä
huomannut. Séverine lepäsi hänen sylissään levottomana, kun tunsi
hänen vapisevan.
— Minä säikähdytin sinua, mutisi hän.
— Ei, ei, minä odotin tuloasi… Menkäämme, ei kukaan voi meitä
nähdä.
Ja käsivarret kiedottuina toistensa vyötäisille kävelivät he nyt hiljaa
ylt'ympäri noilla rakentamattomilla alueilla. Veturitallin tällä puolella
oli kaasulyhtyjä vähän, muutamissa pimeissä paikoissa ei ollut
sellaisia ollenkaan, jota vastoin kauvempana aseman puolella oikein
vilisi niitä, jotka näyttivät kirkkailta tähtösiltä.
He kävelivät sillä tapaa kauvan, sanomatta sanaakaan. Séverine
nojasi päätään Jacquesin olkapäähän ja suoristautui toisinaan
suudellakseen häntä leukaan, ja mies kumartui ja vastasi hänen
suudelmaansa suutelemalla häntä ohimoon hiusrajan kohdalle.
Etäällä olevista kirkoista oli juuri kuulunut yhtä lyövän kellon vakava
ääni. He eivät puhuneet, koska he ymmärsivät toistensa ajatukset.
He ajattelivat ainoastaan tätä, he eivät enään voineet olla yhdessä
tuon ajatuksen heitä vaivaamatta. He harkitsivat asiaa yhä edelleen,
mutta mitä hyödytti ääneen sanoa tarpeettomia sanoja, koska täytyi
toimia? Kun Séverine suoristautui häntä vastaan hyväilläksensä

häntä, tunsi hän veitsen olevan housuntaskussaan. Oliko hän siis
päättänyt sen tehdä?
Mutta Séverinen ajatukset virtasivat yli ja hänen huulensa
avautuivat tuskin kuuluvaan kuiskaukseen:
— Hän oli vast'ikään ylhäällä, en tiedä mistä syystä… Sitten näin
hänen ottavan revolverinsa, jonka oli unhoittanut… Hän lähtee
varmaankin kiertomatkalle.
Tuli jälleen hiljaista ja vasta kahdenkymmenen askeleen päässä
sieltä sanoi Jacques vuorostaan:.
— Viime yönä on täällä varastettu lyijyä… Hän tulee hetken
kuluttua varmaankin tänne.
Séverine vapisi hieman ja molemmat olivat jälleen vaiti ja
hiljensivät kulkuaan. Mutta Séverine alkoi epäillä, että se oli veitsi,
joka oli Jacquesin taskussa. Hän suuteli häntä kaksi eri kertaa
saadakseen paremmin selville, kuinka asian laita oli. Mutta kun hän
kuitenkin, noin hankautuessaan häntä vastaan, jäi epävarmuuteen,
laski hän kätensä riipuksiin ja tunnusteli, samalla kun suuteli häntä
uudelleen. Se oli veitsi. Mutta Jacques ymmärsi hänen
tarkoituksensa, painoi hänet kiivaasti rintaansa vastaan ja sammalsi
hänen korvaansa:
— Hän tulee, sinä pääset vapaaksi.
Murha oli nyt päätetty, heistä tuntui ikäänkuin he eivät enään olisi
kävelleet, vaan vieras voima olisi vienyt heitä eteenpäin maata
pitkin. Heidän aistimensa olivat äkkiä erittäin teroittuneet, varsinkin
tunto, sillä heidän käsiänsä kolotti niiden ollessa toisissaan ja huulten

pieninkin kosketus tuntui raappimiselta. He kuulivat myös veturin
vierimisestä ja etäisestä ähkymisestä lähtevät häipyvät äänet,
kumeita jyskähdyksiä, harhailevia askelia pimeässä. Ja he katsoivat
pimeyteen, eroittivat mustat pilkut esineistä, ikäänkuin usva olisi
kadonnut heidän silmistään: he voivat seurata ohilentävän yölepakon
äkkinäisiä heilahduksia. He pysähtyivät liikkumattomiksi erään
hiililäjän kulmaan ja vaanivat silmin ja korvin ja jännittivät koko
ruumiinsa. Nyt he kuiskailivat.
— Etkö kuullut hätähuutoa tuolta?
— En, se on vaunu, joka viedään sisälle.
— Mutta tuolla vasemmalla puolellamme kävelee joku. Hiekka
narisi.
— Ei, ei, rotat vain juoksentelevat kasojen välissä ja pudottelevat
hiiliä alas.
Muutamia minuutteja kului. Äkkiä pusersi Séverine Jacquesia
vieläkin voimakkaammin.
— Se on hän.
— Missä sitten? Minä en näe mitään.
— Hän kääntyi tavarajunien veturitallin ympäri ja tulee suoraan
meitä kohden. Etkö näe hänen varjoaan valkoisella seinällä?
— Sinä luulet siis, että se on tuo musta kohta. Hän on siis yksin?
— Niin, yksin, hän on yksin.

Tässä ratkaisevassa silmänräpäyksessä heittäytyi Séverine
intohimoisesti Jacquesin kaulaan ja painoi kuumat huulensa hänen
huuliaan vastaan. Hän olisi pitkässä, intohimoisessa suudelmassaan
tahtonut antaa hänelle osan intohimostaan. Kuinka hän rakasti häntä
ja kuinka hän inhosi tuota toista! Oh! Jos hän olisi uskaltanut, olisi
hän jo monta kertaa tehnyt sen itse, säästääkseen Jacquesin
kauhistuksesta. Mutta hänen kätensä huojuivat, hän tunsi olevansa
liian pehmeä, siihen tarvittiin miehen koura. Ja tässä suudelmassa,
joka ei koskaan tahtonut loppua, oli kaikki, minkä hän saattoi
puhaltaa häneen rohkeudestansa, se oli lupautuminen kokonaan.
Veturi vihelsi etäällä, päästäen pimeyteen surumielisen, vaikeroivan
hätähuudon. Kuului tietämättömässä paikassa olevan jättiläisvasaran
säännölliset iskut, samalla kun merestä nousevat usvat joukkioina
ajelehtivat taivaalla ja toisinaan näyttivät saavan nuo säkenöivät
kaasuliekit sammumaan. Kun hän vihdoin veti suunsa pois, ei hänellä
ollut itsellensä jäljellä mitään, hän luuli kokonaan sulautuneensa
Jacquesiin.
Nopealla liikkeellä avasi mies jo veitsen ja päästi kohta sen jälkeen
puoliksi tukahutetun kirouksen.
— Hitto soikoon, se on taas jäähtynyt. Hänhän menee tiehensä.
Se oli totta, varjo, joka oli lähestynyt viidenkymmenen askeleen
päähän heistä, kääntyi vasemmalle ja poistui sellaisen yövartijan
säännöllisellä astunnalla, jota ei mikään ole saattanut levottomaksi.
Séverine kannusti Jacquesia.
— Mene jo!

Molemmat läksivät jälleen liikkeelle, Jacques edellä ja Séverine
hänen kintereillään, ja he hiipivät hänen perässään varoen
aiheuttamasta pienintäkään kolinaa. Korjauspajojen kulmauksessa
kadottivat he hänet silmänräpäykseksi näkyvistään; mutta kun he
sen jälkeen kulkivat erään sivuraiteen yli, huomasivat he hänet
jälleen kahdenkymmenen askeleen päässä siitä. Heidän täytyi etsiä
suojaa pienimpienkin muurien takana, koska yksi ainoakin harha-
askel olisi heidät ilmaissut.
— Me emme saa häntä käsiimme, mutisi Jacques kumeasti. Jos
hän ehtii vaihteen luo, pääsee hän meiltä pakoon.
Séverine hoki edelleen aivan hänen korvaansa:
— Mene, mene!
Tällä hetkellä ja näiden laajojen, pimeyteen hautaantuneiden
alueiden keskellä ja suuren aseman öisen tyhjyyden ympäröimänä,
oli Jacques luja päätöksessään, ja tyhjyydessä tapasi hän
rikostoverin murhaan. Kiiruhtaessaan hiipivää kulkuansa tuli hän
vielä innokkaammaksi ja harkitsi yhä mielessään ja etsi syitä, jotka
tekisivät murhan viisaaksi ja oikeutetuksi teoksi, johon hän ryhtyisi
loogillisen miettimisen ja päätöksen perusteella. Hänhän käyttäisi
oikeuttaan, elämisen oikeuttaan, koska toisen veri oli välttämätön
hänen omalle olemisellensa. Tarvittaisiin ainoastaan isku tällä
veitsellä, jotta hän saavuttaisi onnensa.
— Me emme saavuta häntä, emme saavuta häntä, hoki Jacques
raivoissaan, nähdessään varjon kulkevan vaihteen ohi. Se on
kirottua, kas nyt kiitää hän pakoon.

Mutta Séverinen hermostunut käsi tarttui häntä kiivaasti
olkapäähän ja pakoitti hänet seisomaan hiljaa vastapäätä häntä.
— Katso, hän kääntyy ympäri.
Roubaud kääntyi todellakin ympäri. Hän oli kääntynyt oikealle ja
tuli sitten takaisin. Kenties oli hänellä seljässään ollut epämääräinen
tunne siitä, että häntä ajettiin takaa. Hän jatkoi kuitenkin tyynesti
matkaansa kuten tunnollinen vartija ainakin, joka ei tahdo mennä
sisälle, ennen kuin on luonut katseen kaikkialle.
Jacques ja Séverine pysähtyivät äkkiä juoksussaan, eivätkä
liikahtaneet. Sattuma oli vienyt heidät erään hiililäjän nurkkaan. He
nojautuivat siihen ja näyttivät joutuvan sen sisään, likistäessään
selkänsä mustaa muuria vastaan ja ikäänkuin upotessaan tähän
mustelätäkköön. He pidättivät hengitystään.
Jacques näki Roubaudin tulevan suoraan heitä kohden. Heidän
välillään oli tuskin kolmenkymmenen metrin matka ja se väheni joka
askeleelta, säännöllisesti ja rytmillisesti, ikäänkuin sallimuksen
järkähtämättömällä heilurilla järjestettynä. Nyt oli jäljellä
kaksikymmentä askelta, nyt ainoastaan kymmenen ja hän seisoisi
hänen edessään ja hän kohottaisi käsivartensa näin ja työntäisi
veitsen hänen kurkkuunsa ja vetäisi sen oikealta vasemmalle
estääkseen hänet kirkumasta. Sekunnit eivät hänen mielestään
tahtoneet ollenkaan loppua, sellainen joukko ajatuksia virtasi hänen
tyhjien aivojensa läpi, niin että ajan mitta oli hävinnyt hänen
tietoisuudestaan. Kaikki syyt, jotka olivat saaneet hänet tekemään
päätöksensä, olivat vielä kerran tarkastettavina ja hän näki jälleen
selvästi edessänsä murhan, syineen ja seurauksineen. Nyt oli jäljellä
viisi askelta. Hänen päätöksensä oli järkähtämätön. Hän tahtoi
murhata ja tiesi minkä vuoksi.

Nyt oli jäljellä kaksi askelta, nyt yksi askel. Mutta nyt tapahtui
hänessä hirmukohtaus. Kaikki syöksyi yht'äkkiä kokoon. Ei, ei, hän ei
tappaisi, hän ei voisi tällä tapaa surmata tuota turvatonta ihmistä.
Miten hän miettikin, ei se koskaan voisi tehdä hänestä murhaajaa;
siihen vaadittaisiin puremisen vaisto, hyökkääminen saaliin
kimppuun, nälkä tai intohimo, joka pakoittaa raatelemaan. Mitä se
merkitsi, jos omatunto oli kokoonpantu ainoastaan hitaasti perintönä
kulkeneista oikeuskäsitteistä. Hän tunsi itsessään, ett'ei hänellä ollut
oikeutta tappaa, eikä hänen onnistuisi vakuuttautua siitä, että hän
voisi ottaa itselleen tuon oikeuden.
Roubaud kulki aivan rauhallisena ohitse. Hänen hihansa hipaisi
heitä molempia, heidän seisoessaan siinä hiilien keskellä. Heidän
hengityksensä olisi voinut ilmaista heidät, mutta he seisoivat kuin
kuolleina. Käsivartta ei kohotettu, veistä ei isketty ruumiiseen. Ei
mikään pannut noita taajoja varjoja värisemään, ei edes pöyristys.
Nyt oli hän jo kymmenen askeleen päässä sieltä ja he seisoivat vielä
liikkumattomina paikoillaan, selin tuota mustaa hiilikasaa päin ja
täydellisesti pidättäen hengitystään, pelon valtaamina tuon yhden
ainoan aseettoman miehen takia, joka juuri niin rauhallisena oli
kulkenut heidän ohitsensa.
Jacques tukahutti raivon ja häpeän nyyhkytyksen.
— Minä en voi, en voi.
Hän aikoi jälleen tarttua Séverineen, nojautuakseen häneen, siitä
saadakseen sen anteeksiannon, sen lohdutuksen, jota hän tarvitsi.
Mutta hän pakeni mitään sanomatta pois. Jacques ojensi kätensä ja
tunsi ainoastaan hänen hameensa liukuvan käsiensä välitse ja kuuli
vain hänen kevyen pakonsa. Hän kulki turhaan hetkisen hänen
perässään, hänen nopea katoamisensa kokonaan ällistytti hänet.

Oliko hän siis niin katkeroitunut hänen heikkoutensa johdosta?
Halveksiko hän häntä? Varovaisuus esti Jacquesia ottamasta häntä
kiinni. Mutta kun hän jälleen oli yksinään näillä laajoilla,
rakentamattomilla alueilla noine pienine, keltaisine valopilkkuineen,
valtasi hänet hirveä epätoivo ja hän riensi pois ja painoi päänsä
vuodepielukseensa, siten tukahuttaakseen kirouksen, joka lepäsi
hänen olemassaolonsa yli.
Kymmenkunta päivää myöhemmin, maaliskuun lopussa, pääsivät
Roubaudit vihdoinkin voitolle Lebleun perheestä. Hallinto oli
tunnustanut oikeutetuiksi Roubaudien vaatimukset, joita
asemapäällikkö Dabadie puolsi, sitäkin suuremmalla syyllä, kun neiti
Guichon etsiessään vanhoja tilejä aseman arkistosta, oli äskettäin
löytänyt puheenaolleen kirjeen, jossa rahastonhoitaja sitoutui
luopumaan asunnosta, jos uusi alipäällikkö sitä vaatisi.
Katkeroituneena tappionsa johdosta puhui rouva Lebleu heti
muuttamisesta: koska kerran tahdottiin hänen kuolevan, niin olisi
parasta tehdä loppu yksin tein.
Tämä muistettava muutto sai käytävän kolmeksi päiväksi
täydelliseen kuumeeseen. Yksinpä pikku rouva Moulin, joka muuten
teki itsensä niin vähän huomatuksi, ja jonka ei koskaan nähty
menevän eikä tulevan, sekaantui siihen ja kantoi Séverinen
työpöydän toisesta huoneustosta toiseen. Mutta varsinkin Philomène
kiihoitti epäsopua. Hän saapui sinne jo ensi hetkellä avustamaan,
teki nyyttejä, siirsi huonekalut ja tunkeutui Lebleun asuntoon, ennen
kun perhe oli sieltä lähtenyt. Hän se ajoi rouva Lebleun pois sieltä,
vaikka molempien perheiden huonekalut vielä olivat aivan sekaisin.
Hän oli alkanut osoittaa sellaista harrastusta Jacquesia ja kaikkea
kohtaan, mihin tämä oli kiintynyt, että Pecqueux tuli ihmeisiinsä ja
epäluuloiseksi. Kasvoillaan salavihainen, häijy ilme kysyi hän häneltä,

oliko hän väleissä veturinkuljettajan kanssa. Hän ilmoitti hänelle
etukäteen, että hän panisi molemmat tilille, jos saisi heistä jotakin
selville. Philomène ihaili vielä enemmän tuota nuorta miestä ja
palveli häntä ja hänen rakastajatartaan, toivoen heidän väliinsä
tunkeutumalla voivansa hiukan nauttia hänestä. Kun hän oli kantanut
sisälle viimeisen tuolin, suljettiin ovet. Äkkiä huomasi hän jakkaran,
jonka rahastonhoitajan rouva oli unhoittanut paikoilleen, hän avasi
silloin oven jälleen ja heitti jakkaran käytävään. Muutto oli sillä
lopetettu.
Elämä siellä palasi vähitellen yksitoikkoiseen kulkuunsa. Sillä aikaa
kun rouva Lebleu istui reumatismin kahlehtimana lepotuolissaan ja
oli kuolettavasti ikävissään ja itki suuria kyyneliä sen vuoksi, ett'ei
hänellä ollut muuta näköalaa kuin sinkkikatto, joka kaihti taivasta,
istui Séverine erään etupuolella olevan akkunan luona ja katseli
loppumattomiin. Hänellä oli silmiensä edessä tuo vilkas vilinä
lähtevien junien ratapihalla ja ajavien ja kävelijäin alituinen virta.
Aikainen kevät oli jo saanut katukäytävien suuret puut
viheriöitsemään, ja tuolla takapuolella levisivät etäällä Ingouvillen
kunnaat puita kasvavine rinteineen ja valkoisine huviloineen. Mutta
häntä ihmetytti se, että hän tunsi niin vähän hupia vihdoinkin
nähdessään unelmansa toteutuneena, oleskellessaan tässä
huoneustossa, jota hän niin oli mielinyt, ja saadessaan tilaa, päivää
ja aurinkoa. Kun hänen apuvaimonsa, Simon eukko, nurisi siitä, että
häntä häirittiin totutuissa tavoissansa, saattoi Séverine tulla
kärsimättömäksi ja toisinaan kaipasi hän vanhaa pesäänsä, jossa,
kuten hän sanoi, lika näkyi vähemmän.
Roubaud oli aivan yksinkertaisesti antanut hänen olla olojaan. Hän
ei näyttänyt tietävän muuttaneensa asuntoa; tapahtui usein, että
hän erehtyi ja huomasi erehdyksensä vasta kun hänen uusi

avaimensa ei sopinut vanhaan lukkoon. Mutta muuten oli hän yhä
enemmän poissa, ja aviollisen yhdyselämän hajaantumista jatkui.
Kerran näytti hän kuitenkin virkoavan uudelleen eloon; hänen
poliittiset harrastuksensa olivat heränneet, vaikk'eivät ne olleet
kovinkaan selvät eikä intohimoiset, mutta hänen sydämessään säilyi
katkeruus tuon vanhan jutun johdosta aliprefektin kanssa, joka oli
hänelle maksaa hänen paikkansa. Hän riemuitsi siitä, että yleiset
vaalit olivat järkähyttäneet keisarikuntaa, joka nyt läpikävi kauheata
selkkausta, ja hoki, ett'eivät nuo ihmiset aina olisi herroja. Mutta
ystävällinen varoitus Dabadielta, joka oli siitä saanut tiedon neiti
Guichonilta, jonka läsnäollessa hän oli puhunut tähän
vallankumoukselliseen tapaan, riitti muuten tekemään hänet jälleen
tyyneksi. Koska käytävässä nyt taas vallitsi rauha ja sopu, sitten kun
rouva Lebleu, joka oli kuolemaisillaan ikävästä, kävi päivä päivältä
yhä huonommaksi, niin minkä vuoksi siis hankittaisiin uusia
ikävyyksiä sekottautumalla politiikkaan. Roubaud teki yksinkertaisen
eleen, hän välitti yhtä vähän politiikasta kuin kaikesta muustakin…
Hän, joka ei tuntenut mitään tunnonvaivoja, kävi päivä päivältä yhä
lihavammaksi ja kulki välinpitämättömänä ja hitaana tietään
eteenpäin.
Sen jälkeen kun Jacques ja Séverine voivat kohdata toiseensa
koska tahansa, oli heidän keskenäinen hämilläolonsa lisääntynyt. Nyt
ei enään mikään estänyt heidän onneansa; hän voi mennä hänen
luokseen toisia rappusia milloin halusi, eikä hänen tarvinnut peljätä,
että häntä vakoiltaisiin. Se oli heidän huoneustonsa ja hän olisi
voinut nukkua siellä yötä, jos olisi ollut niin rohkea. Mutta se, jota he
molemmat olivat tahtoneet, ja josta he olivat sopineet, oli
suorittamatta ja jäi toteuttamatta, ja ajatus siitä synnytti keskenäistä
hämilläoloa ja nosti heidän välilleen ylipääsemättömän muurin. Hän
häpesi heikkouttaan ja huomasi hänen joka kerta olevan yhä

enemmän pahoillaan ja onneton odottaessaan turhaan. Heidän
huulensa eivät enään etsineet toisiansa, sillä tämä puolinainen
omistaminen ei enään ollut heille kylliksi; he halusivat koko onnea,
matkustaa, mennä naimisiin tuolla kaukana, uutta elämää he
kaihosivat.

Eräänä iltana hän tapasi Séverinen itkemässä, ja kun tämä sai
nähdä hänet, ei hän herennyt, vaan ripustautui hänen kaulaansa ja
itki vielä kovemmin. Hän oli ennenkin itkenyt siten, mutta silloin oli
Jacques voinut tyynnyttää hänet painamalla hänet rintaansa vastaan.
Mutta nyt mitä enemmän hän painoi häntä itseään vastaan, sitä
enemmän tunsi hän hänen epätoivonsa lisääntyvän. Hän joutui pois
suunniltaan ja otti vihdoin hänen päänsä käsiensä väliin. Hän katsoi
syvään hänen silmiinsä. Hän ymmärsi, miksi hän oli niin
epätoivoissaan; se oli siksi, että hän oli nainen, eikä lempeässä
toimettomuudessaan itse uskaltanut antaa surmaavaa veitseniskua.
— Anna minulle anteeksi ja odota vielä vähän… Vannon sinulle
tekeväni sen pian, niin pian kuin voin.
Séverine painoi heti suunsa hänen suutaan vastaan, ikäänkuin olisi
hän tahtonut varustaa tämän lupauksen sinetillä, ja he suutelivat
toisiaan taas syvästi ja intohimoisesti.

X.
Phasie täti kuoli viimeisen kouristuskohtauksen jälkeen torstai-iltana
kello yhdeksän. Misard, joka istui hänen vuoteensa vieressä ja odotti
kuolemaa, koetti turhaan sulkea hänen silmiään; ne jäivät
itsepintaisesti auki, pää oli kylmennyt ja oli hiukan kallellaan
olkapäähän päin, ikäänkuin katsellakseen ympärilleen huoneessa, ja
vääristyneiden huulten ympärillä näkyi pilkallinen hymy. Erään
pöydän kulmalla paloi yksi ainoa kynttilä. Ja junat, jotka yhdeksän
jälkeen täydellä nopeudella kulkivat siitä ohitse, eivät aavistaneet
mitään tästä ruumiista, jossa ruumiinlämpö vielä oli jäljellä, ja
tärisyttivät sitä silmänräpäyksen kynttilän lekottaessa.
Päästäkseen Floresta, lähetti Misard hänet heti Doinvilleen
ilmoittamaan kuolemantapauksesta. Hän ei voinut olla kotona ennen
yhtätoista, niin että Misardilla oli kaksi tuntia käytettävänään. Hän
leikkasi ensin itselleen leivänpalan kaikessa rauhassa, sillä hän tunsi
vatsansa olevan tyhjä, kun hän ei ollut syönyt päivällistä vaimonsa
kuolinkamppauksen vuoksi, josta ei ollenkaan tahtonut loppua tulla.
Hän ei istuutunut, vaan käveli syödessään edestakaisin
järjestelemisen touhussa. Toisinaan täytyi hänen kuitenkin tauota
niiden ankarain yskänpuuskien takia, jotka häntä ahdistivat, ja
koukistua kumaraan. Puolikuollut ja laiha ja heikko kuin oli

kiillottomine silmineen ja värittömine hiuksineen, ei hän todellakaan
näyttänyt siltä, että hän kauvan voisi nauttia voitostaan. Mutta hän
oli joka tapauksessa tehnyt lopun vaimostaan, joka oli ollut niin suuri
ja kaunis ja roima nainen, niinkuin hyönteinen kalvaa tammea. Nyt
makasi hän tuossa masennettuna ja tuhottuna, Misardin vielä ollessa
jäljellä.
Hän tuli silloin ajatelleeksi erästä asiaa, kumartui alas ja veti
vuoteen alta esiin hiukan lesevettä sisältävän maljan, joka oli laitettu
kuntoon peräruisketta varten. Sitten kun Phasie oli saanut selville,
että hänen miehensä pani myrkkyä suoloihin, ei tämä enään
käyttänyt niitä, vaan antoi Phasielle myrkkyä tällä tavalla, ilman että
vaimolla oli epäilystäkään siitä. Ulkona tyhjennettyään astian, palasi
hän sisälle ja pesi tahraantuneen lattian sienellä. Miksi oli Phasie
ollut niin itsepintainen? Hän oli tahtonut näytellä viekasta ja sai
syyttää itseänsä. Täytyy pitää silmänsä auki, jos perheessä on
kysymys siitä, kuka saa haudata toisen, ilman että muut ihmiset
saavat vihiä asiasta. Misard oli tästä ylpeä ja naureskeli kuten
oivallista tarinaa, että vaimo noin kiltisti nautti myrkkyä sitä tietä,
vaikka hän oli niin varovainen kaiken sen suhteen, mikä kulki suun
kautta. Tässä silmänräpäyksessä kulki ohitse pikajuna, joka kääri
tuon matalan tuvan sellaiseen ilmanvetoon, että hän, vaikka olikin
siihen niin tottunut, kääntyi vapisten akkunaan päin. Oh, siinä oli tuo
alituinen virta ihmisiä, jotka tulivat kaikilta mahdollisilta maailman
kulmilta, ja jotka eivät tietäneet tai välittäneet siitä, keitä he
murskasivat matkallaan, niin kiire oli heillä itsellään mennä hornan
tuuttiin! Ja kun kaamea hiljaisuus oli junan mentyä palannut, kohtasi
hän uudelleen kuolleen suuret, auki jääneet silmät, jotka näyttivät
seuraavan hänen jokaista liikettään, pilkallisen hymyn edelleen
viipyessä huulten ympärillä.

Muuten niin hidasluontoinen Misard ei nyt voinut olla tekemättä
vihaa ilmaisevaa liikettä. Hän ymmärsi sangen hyvin, että Phasie
sanoi hänelle: Etsi, etsi! Ei hän vienyt tuhatta frangiaan mukanansa,
ja nyt, kun ei häntä enään ollut, saisi kai Misard ne lopultakin
käsiinsä. Miksi ei hän ollut voinut antaa niitä hänelle vapaaehtoisesti,
niin että olisi päästy kaikista ikävyyksistä? Silmät seurasivat häntä
kaikkialle. Etsi, etsi! Hän ei ollut uskaltanut tutkia tätä huonetta, niin
kauvan kun vaimo oli siellä ollut elossa, mutta nyt tarkasti hän sen.
Ensiksi kaapin. Hän veti avaimet esiin pieluksen alta, kouri
alusvaatteilla täytettyjä hyllyjä, tyhjensi molemmat laatikot ja veti ne
ulos katsoakseen, eikö niiden taakse oltu mitään kätketty. Ei, siellä ei
ollut mitään.
Sitten ajatteli hän yöpöytää, irroitti marmorilevyn ja käänsi pöydän
turhaan ylösalasin. Takan päällä oli kapea markkinapeili, joka oli
lyöty kiinni parilla naulalla. Sielläkin toimitti hän tutkimuksen; työnsi
peilin taakse sileän viivoittimen ja sai esille ainoastaan joukon
mustaa tomua. Etsi, etsi! Välttääkseen noita suuria avonaisia silmiä,
joiden hän tunsi itseään katselevan, laskeutui hän nelinkontin ja
koputteli sinne tänne lattiaan kuunnellakseen, eikö vastakaiku
ilmaisisi hänelle mitään kolopaikkaa. Useita lankkuja oli irrallaan ja
hän kiskoi ne pois. Ei mitään, yhäkään ei mitään!
Kun hän nousi, olivat kuolleen silmät jälleen suunnattuina häneen,
hän kääntyi ympäri ja koetti kohdata niiden lujaa katsetta. Hän ei
voinut sitä enään epäillä. Phasie teki hänestä pilkkaa. Etsi, etsi! Hän
joutui pois suunniltaan, meni hänen luokseen erään epäluulon
ajamana, joka muutti hänen kalpeat kasvonsa vielä kalpeammiksi.
Minkä vuoksi oli hän ollut niin varma siitä, ettei Phasie veisi tuhatta
frangiaan mukanansa? Hän teki sen ehkä sittenkin lopultakin. Ja hän
rohkaisi mielensä, veti peiton pois hänen päältään ja riisui hänet ilki

alasti, koska hän sanoi hänelle, että hänen pitäisi etsiä. Ja hän etsi
hänen altaan ja hänen niskansa takaa, pöyhi vuoteen ylösalaisin ja
pisti käsivartensa olkapäätä myöten olkiin. Hän ei löytänyt mitään.
Etsi, etsi! Mutta pää putosi takaisin väärään kääntyneelle pielukselle
ja katsoi häneen edelleen pilkallisilla silmillään.
Kun Misard raivoissaan ja vapisten koetti järjestää vuodetta, tuli
Flore kotiin Doinvillestä.
— Se on kello yksitoista ylihuomenna, sanoi hän.
Hän tarkoitti hautausta, mutta ensi silmäyksellä hän ymmärsi,
mikä työ oli saattanut Misardin niin hengästyksiinsä hänen
poissaollessaan. Hän teki halveksivaa välinpitämättömyyttä
ilmaisevan liikkeen.
— Älkää hakeko, ette te kuitenkaan saa mitään käsiinne.
Misard kuvitteli mielessään hänenkin uhmailevan ja meni
hampaitaan kiristellen häntä vastaan.
— Hän on antanut ne sinulle ja sinä tiedät, missä ne ovat.
Sellaiselle ajatukselle, kuin että hänen äitinsä oli voinut antaa
rahat jollekin, vaikkapa omalle tyttärelleen, ei hän voinut muuta kuin
kohauttaa olkapäitään.
— Oh, joutavia! Antanut ne… Niin, antanut ne maalle!… Niin, siellä
ne ovat, sieltä voitte niitä etsiä.
Ja suurin elein osoitti hän koko taloa, puutarhaa kaivoineen,
rautatietä ja koko tuota avaraa maisemaa. Niin, siellä ne varmasti
olivat jossakin kolossa, mistä ei kukaan voisi niitä löytää. Kun Misard

harmista halkeamaisillaan alkoi siirrellä huonekaluja ja koputella
seiniä, vähintäkään häikäilemättä tuota nuorta tyttöä, jatkoi tämä
akkunan luona seisoen puoliääneen:
— Ah, kuinka nyt on kaunis yö!… Olen kävellyt nopeasti, tähdet
loistavat kuin keskellä päivää… Huomenna, kun aurinko nousee,
tulee kaiketi oikein kaunista.
Flore jäi kotvaseksi seisomaan akkunan luo ja katseli valoisaa,
huhtikuun ensi lämmön elähyttämää maisemaa, joka vaivutti hänet
unelmiin ja avasi jälleen ne sydänhaavat, jotka häntä vaivasivat.
Mutta kun hän kuuli Misardin lähtevän huoneesta ja jatkavan
tutkimuksiaan toisissa huoneissa, meni hän vuorostaan
kuolinvuoteen luo, istuutui ja katseli äitiään. Kynttilä paloi edelleen
pöydällä korkein ja hiljaisin liekein. Juna kulki nyt ohitse ja tärisytti
koko tupaa.
Floren aikomuksena oli valvoa koko yö kuolleen luona, ja hän
vaipui ajatuksiinsa. Ruumiin näkeminen irroitti hänet ensi aluksi
hänen päähänpistostaan, joka oli vainonnut häntä koko matkan
Doinvillestä tuossa hiljaisessa, rauhallisessa tähtikirkkaassa yössä.
Mikä häntä nyt hämmästytti ja vaimensi hänen kärsimystään, oli se,
ett'ei hän enään surrut äidin kuolemaa, eikä itkenyt. Hän oli
kuitenkin ollut hyvin kiintynyt äitiin, vaikka hän villiintymisessään ja
vaiteliaisuudessaan alati pysyttelihe ulkosalla ja kuljeskeli kedoilla,
milloin hänellä vaan ei ollut mitään tekemistä. Viimeisen
taudinpuuskan aikana, joka johti äidin kuolemaan, oli hän monta
monituista kertaa istuutunut hänen vuoteensa viereen ja innokkaasti
pyytänyt häntä kutsuttamaan lääkärin, sillä hän epäili Misardin
konnantyötä ja toivoi, että hänet voitaisiin peloittaa luopumaan siitä.
Mutta hän ei ollut koskaan saanut muuta vastausta kuin raivoisan

kiellon. Oli kuin olisi äiti pitänyt jonkinlaisena ylpeytenä olla
ottamatta vastaan apua keneltäkään ja joka tapauksessa katsonut
olevansa varma voitostaan, koska hän kuitenkin ottaisi rahat
mukaansa. Sen jälkeen ei Flore ollut puuttunut asiaan, vaan
kadonnut ja alkanut uudelleen kuljeskella, ylt'ympäri unhoittaakseen
oman kärsimyksensä, joka häntä jälleen niin kiusasi.
Varmaankin se oli se, joka teki hänen niin tunnottomaksi äidin
kuoleman suhteen. Kun itse kantaa jotakin hyvin suurta surua, niin
ei ole tilaa millekään muulle. Hänen äitinsä oli mennyt pois hänen
luotansa ja hän näki hänen nyt makaavan siinä kalpeana ja
tuhottuna ja kuitenkaan, vaikka hän sitä yrittikin, ei hänen surunsa
tullut entistään suuremmaksi. Mitäpä hyödyttäisi kutsua santarmeja
ja ilmiantaa Misard, koska kaikki kuitenkin luhistui kokoon. Vähitellen
ja vaikka hänen katseensa yhä oli kiintyneenä kuolleeseen, lakkasi
hän näkemästä häntä ja palasi vastustamattomasti siihen, mikä oli
hänen sisäisen näkönsä edessä, ja vaipui kokonaan siihen
ajatukseen, joka oli kuin kiinninaulattuna hänen aivoissaan, ja ainoa,
josta hän nyt enään oli tietoinen, oli ankara täristys junista, joiden
ohikulku hänelle ilmoitti aikaa.
Nyt oli hetken aikaa pitkän matkan päässä jyrissyt Pariisista
saapuva sekajuna. Kun veturi suurine lyhtyineen vihdoin mennä
vohotti akkunan ohi, valaisi huonetta ikäänkuin salama, tulipalo.
— Yksi ja kahdeksantoista, ajatteli hän. Vielä viipyy seitsemän
tuntia. He kulkevat ohitse kahdeksan ja kuusitoista nyt aamulla.
Useamman kuukauden aikana oli tämä odotus joka viikko häntä
kiusannut. Hän tiesi, että Séverine matkusti Pariisiin joka perjantai-
aamu pikajunalla, jota Jacques kuljetti; ja koko hänen elämänsä
täytti nyt kiduttava lemmenkateus, joka pani hänet väijymään heitä

ja huomaamaan heidät ja sai hänet sanomaan itselleen, että he
saivat Pariisissa häiritsemättä kuulua toisilleen. Voi, kuinka
inhottavalta tuntui, kun ei voinut tarrautua kiinni kiitävän junan
viimeiseen vaunuun ja myös mennä mukaan. Oli kuin olisivat junan
kaikki pyörät kulkeneet hänen sydämensä yli. Hänen kärsimyksensä
oli niin suuri, että eräänä iltana hän sulkeutui huoneeseen
kirjoittaakseen viranomaisille. Hänen kärsimyksensä näet taukoisi,
jos hän voisi saada Séverinen vangituksi, ja hän luuli voivansa saada
hänet kiinni, jos hän, joka oli saanut ilmi hänen ruokottoman
suhteensa presidenttiin, puhuisi siitä tuomarille. Mutta kun hän istui
siinä kynä kädessään, ei hän koskaan voinut saada muotoa
kirjeeseen, ja kuuntelisivatko muuten viranomaiset häntä? Kaikki nuo
hienot ihmiset varmaankin olivat yhtä puolta. He kentiesi panisivat
hänet itsensä vankilaan, kuten olivat tehneet Cabuchelle. Ei, hän
kostaisi, mutta yksinään, tarvitsematta apua keneltäkään toiselta.
Tarkoin katsottuna ei hän kuitenkaan ajatellut kostaa, tuottaa
kenellekään toiselle kärsimystä päästäkseen vapaaksi omastaan;
häntä kannusti tarve saada loppu kaikesta, syöstä kaikki nurin,
ikäänkuin ukkonen olisi lakaissut ne pois. Hän oli hyvin ylväs ja
voimakkaampi ja kauniimpi kuin toiset sekä vakuutettu täydestä
oikeudestaan saada rakkautta osakseen. Kulkiessaan yksinään noita
autioita polkuja tässä susien maassa paljaine, raskaine, vaaleine
hiuspalmikoineen, olisi hän tahtonut saada käsiinsä kilpailijansa
Séverinen, jotta he kahden vihamielisen amatsoonin tavoin
ratkaisisivat riitansa jossakin metsän kolkassa. Koskaan ei ollut
yksikään mies uskaltanut koskea häneen, sillä hän ajoi ne pakosalle;
ja siinä piili hänen vastustamaton voimansa, hänen
voitonvarmuutensa.
Edellisellä viikolla oli hän yht'äkkiä saanut päähänsä jotakin, joka
istui siellä kuin naulalla lyötynä, hän ei tietänyt mistä: Hän tappaisi

heidät, niin ett'eivät he enään voisi yhdessä matkustaa siitä ohitse
matkalla Pariisiin. Hän ei mietiskellyt, hän vain totteli hurjaa
hävittämisvaistoaan. Kun oas tarttui hänen ruumiiseensa, tempasi
hän sen pois ja olisi, jos tarvis olisi vaatinut, voinut leikata sormensa
poikki. Hän surmaisi heidät, tappaisi heidät ensi kerralla, kun he
kulkisivat ohitse, ja sitä tarkoitusta varten laahaisi hän pölkyn alas
radalle taikka tempaisi irti kiskon, niin että juna joutuisi pois
raiteelta, ja kaatuisi kumoon, sanalla sanoen, niin että kaikki
murskaantuisi ja hautaantuisi. Jacques jäisi varmaankin makaamaan
veturiin jäsenet murskaantuneina ja Séverine, joka aina istui
ensimmäisessä vaunussa ollakseen häntä lähempänä, ei pääsisi
pakoon. Mitä tuli toisiin, tuohon katkeamattomaan ihmisvirtaan, niin
ei hän heitä edes ajatellut. Eihän hän tuntenut heitä. Tunnin toisensa
jälkeen ajatteli hän tätä, kokonaisen junan murskaamista, niin
monen ihmishengen uhraamista. Se olisi ainoa hirmukohtaus, joka
olisi tarpeeksi suuri ja verinen ja täynnä vaikerrusta, jotta hän siinä
voisi hautoa kyynelten turvottamaa suurta sydäntänsä.
Edellisen perjantain aamuna oli hän kuitenkin tuntenut olevansa
heikko, eikä voinut vielä päättää mistä ja kuinka hän ottaisi pois
kiskon. Mutta illalla, kun hän oli vapaana, pälkähti hänen päähänsä
mennä tunnelin läpi ja kulkea aina Dieppeen vievälle haararadalle
saakka. Hänen mielikävelyjään oli kulkea läpi tämän runsaan puoli
lieuea pitkän suoran holvin, jossa hänestä tuntui kuin olisivat junat
häikäisevine valoineen vierineet hänen ylitsensä. Joka kerta oli juna
murskaamaisillaan hänet ja varmaankin se oli vaara, joka houkutteli
häntä ja pani hänen tuntemaan tarvetta osoittautua uljaaksi. Sitten
kun hän kysymyksessä olevana iltana oli välttänyt ratavartijan
huomion ja päässyt tunnelin puoliväliin, jolloin hän siirtyi
vasemmalle, ollakseen varma, että jokainen edestäpäin tuleva juna
kulkisi hänen oikealta puoleltaan, oli hän niin varomaton, että

kääntyi ympäri seuratakseen katseellaan Havreen menevän junan
lyhtyjä. Kun hän sitten jälleen läksi liikkeelle, astui hän harhaan ja
meni ympäri eikä enään tietänyt, mille suunnalle punaiset lyhdyt
äsken olivat kadonneet. Niin rohkea kuin olikin, pysähtyi hän, vielä
hämmentyneenä pyörien kolinasta, kädet kylminä ja paljaan tukan
noustessa päässä pystyyn peljästyksestä. Kun nyt tulisi uusi juna, ei
hän enään voisi tietää, kuvitteli hän mielessään, olisiko se menossa
ylös- vaiko alaspäin, ja heittäytyipä hän oikealle tai vasemmalla,
joutui hän vaaraan tulla kädenkäänteessä silvotuksi. Hän koetti
säilyttää mielenmalttiaan, muistaa ja harkita. Mutta sitten valtasi
hänet aivan äkkiä pelko ja hän syöksyi raivoisasti ja
summanmutikassa tietä eteenpäin. Ei, ei, hän ei tahtonut tulla
tapetuksi ennen kun oli tappanut nuo molemmat toiset! Hänen
jalkansa sotkeutuivat kiskoihin, hän luiskahti ja lankesi ja juoksi vielä
nopeammin. Tunneli sai hänet pois suunniltaan, oli kuin olisivat
seinät tunkeutuneet yhteen tukahuttaakseen hänet, holvista kimposi
takaisin kaikkia mahdollisia ääniä, uhkaavia ääniä ja kamalasti
pauhaavaa jyrinää. Joka silmänräpäys kääntyi hän ympäri, kun luuli
tuntevansa niskassaan veturin kuuman huohotuksen. Kaksi kertaa
tuli hän aivan äkkiä vakuutetuksi siitä, että hän erehtyi, että kuolema
tuli häntä vastaan siltä taholta, johon hän pakeni ja tuossa tuokiossa
muutti hän suuntaa. Hän kiiti kiitämistään eteenpäin, mutta silloin
näkyi häntä vastaan etäältä tulevan tähti, pyöreä, leimuava silmä,
joka kävi yhä suuremmaksi. Hän voitti vastustamattoman halun
kääntyä ympäri, joka hänet valtasi. Silmä muuttui hiilivalkeaksi,
höyrypannun kaikkinieleväksi aukoksi. Sokaistuna hyppäsi hän
tietämättään syrjään vasemmalle ja juna kulki ukkosenjyrinän tavoin
ohi ja kietoi hänet vihuriinsa. Viisi minuuttia myöhemmin oli hän
vahingoittumattomana ulkona tunnelista Malaynayn puolella.

Kello oli yhdeksän ja Pariisista tulevan pikajunan piti olla siellä
muutaman minuutin kuluttua. Hän jatkoi yhtämittaa kulkuaan kaksi
sataa metriä aina Dieppeen vievälle haararadalle saakka ja tutki
samalla rataa nähdäkseen, voisiko hän mahdollisesti käyttää jotakin
asianhaaraa hyväksensä. Dieppen radalla, joka oli korjauksen
alaisena, oli parhaillaan sorajuna, jonka hänen ystävänsä Ozil
äskettäin oli vaihteesta sinne ohjannut. Hän sai aivan äkkiä erään
tuuman ja teki suunnitelmansa. Hän aivan yksinkertaisesti estäisi
vaihdemiehen kääntämästä vaihdetta Havren radalle, niin että
pikajuna ajaisi sorajunan päälle ja murskautuisi sitä vastaan. Siitä
päivästä saakka, jona Ozil intohimossaan oli heittäytynyt hänen
päällensä ja hän oli kepillään melkein halkaissut hänen kallonsa, oli
hänessä säilynyt jonkinlaista ystävyyttä häntä kohtaan ja häntä
huvitti vuorelta alas tullessaan eksyneen vuohen tavoin tulla häntä
tervehtimään. Ozil, joka oli ollut sotamiehenä ja oli hyvin laiha ja
vähäpuheinen, antautui kokonaan toimeensa, eikä koskaan tehnyt
itseään syypääksi huolimattomuuteen, vaan piti silmänsä yötä päivää
avoimina. Ainoastaan tämä villitär, joka oli häntä löylyttänyt, ja joka
oli väkevä kuin poika, voi, kun hän vain liikutti pikkusormeaankin,
saada hänen verensä kuohuksiin. Vaikka hän oli tyttöä neljätoista
vuotta vanhempi, himoitsi hän häntä ja oli itselleen vannonut
voittavansa hänet kärsivällisyydellä ja ystävällisyydellä, koska ei ollut
väkivallalla onnistunut.
Kun Flore nyt kysymyksenalaisena yönä pimeässä lähestyi hänen
vahtikojuaan ja kutsui häntä ulos, unohti hän kaikki seurustellakseen
hänen kanssaan. Hän sekoitti hänen ajatuksensa ja houkutteli hänet
mukaansa kedolle ja sepitteli juttuja äidin sairaudesta ja ett'ei hän
jäisi Croix-de-Maufrasiin, jos kadottaisi hänet. Sillä aikaa kuunteli hän
tarkkaavaisesti, voisiko hän etäältä kuulla pikajunan kolinaa, joka
täysin höyryin oli tulossa Malaunaystä, ja kun hän sen kuuli, kääntyi

hän ympäri katsomaan. Mutta hän ei ollut muistanut noita uusia
turvallisuuskoneita, kun juna saapui Dieppen-radalle, antoi se itse
pysähdysmerkin ja veturinkuljettaja ehti pysähdyttää junan
muutaman askeleen päähän sorajunasta. Ozil kirkasi kuten mies,
joka herää siitä, että talo on luhistumaisillaan kokoon hänen
ylitsensä, ja juoksi takaisin paikalleen, Floren seisoessa siinä
liikkumattomana ja tunnottomana pimeässä, katsellakseen sitä
liikettä, mikä onnettomuudesta seurasi. Kaksi päivää sen jälkeen tuli
vaihdemies, joka oli saanut siirron, lausumaan jäähyväisiä hänelle,
jota hän ei ollenkaan epäillyt, ja pyysi häntä innokkaasti etsimään
hänet, sitten kun hänen äitinsä ei enään olisi elossa. Sillä kertaa se
siis ei ollut onnistunut, täytyi keksiä jotakin muuta.
Nämä haaveilut, jotka tähän saakka olivat tehneet Floren katseen
niin sameaksi, katosivat nyt tästä muistutettaessa; ja hän katseli
uudelleen kuollutta, jota keltainen kynttilänvalo valaisi. Hänen äitinsä
ei enään ollut elossa, läksisikö hän pois ja menisi naimisiin Ozilin
kanssa, joka oli rakastunut häneen ja kentiesi tekisi hänet
onnelliseksi? Koko hänen olentonsa nousi sitä vastaan. Ei, ei! Jos hän
olisi niin pelkuri, että antaisi noiden molempien toisten jäädä eloon
ja eläisi itse, kuljeskelisi hän kernaammin teillä tai rupeisi
palvelustytöksi, kuin kuuluisi kenellekään, jota hän ei rakastaisi.
Tavaton ääni sai hänet nyt kuuntelemaan, hän ymmärsi, että se oli
Misard, joka kuokalla tutki keittiön maapermantoa. Hän etsi
raivoisasti rahoja ja olisi voinut repiä koko tuvan alas. Flore ei
kuitenkaan tahtonut jäädä hänenkään luokseen. Mihinkä ryhtyisi
hän? Myrskytuuli suhisi, seinät tärisivät ja kuolleen kasvoilla loi
heijastus tulenvaloaan avonaisten silmien ja pilkallisesti vääntyneiden
huulten ylitse. Se oli viimeinen Pariisista tuleva sekajuna raskaine,
hitaine vetureineen.

Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade
Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.
Let us accompany you on the journey of exploring knowledge and
personal growth!
textbookfull.com